R_数据处理_basic
数据结构
数据结构:向量、矩阵、数组、数据框、因子、列表
向量
- 用于储存数值型、字符型或逻辑性数据的一维数组。
- 同一向量中的数据必须为同一模式;例如同为数值型
- 通过方括号
[ ]给定元素所处位置的数值来访问向量中的元素
标量:只含一个元素的向量
|
|
矩阵&数组
- 矩阵:二维数组,每个元素都拥有相同的模式(数值型、字符型、逻辑型)
- 使用方括号
[]和下标 来选择矩阵中的行、列或元素; - matrix(vector, nrow=n1, ncol=n2, byrow=FALSE, dimnames=list(rnames, cnames))
- 使用方括号
nrow/ncol = n,表示行列的数量,即维度
byrow = FALSE(默认), 按列填充
dimanems=list() : 可选的,以字符型向量命名的行名与列名
|
|
- 数组:任意维度的向量;是矩阵的自然推广
- array(vector, dimensions, dimnames=list())
数据框
- data.frame(…, row.names = NULL):创建数据框
- 不同的列可以包含不同模式(数值型、字符型等)的数据,通常用
data.frame()创建 - 通过方括号
[ ]与$以及attach()&detach() 或 with()进行选取列- 列所处位置的数值
- 指定列名
- 运用
with()进行数据框绑定,用花括号{ }来指定对数据框执行的语句;- 对象仅存在于with()结构以内
- 若要创建with()结构以外也存在的对象,使用特殊赋值符号
<<替代标准的赋值符号<;可以将对象保存在全局环境中
|
|
- 创建空数据框:从已有数据中获取,可免去设置格式
|
|
列表
- 列表:任意对象的有序集合;列表允许若干个对象到单个对象名下。(即列表可能是向量、矩阵、数据框,甚至是其他列表的组合)
- 通过双重括号
[[ ]]中指名代表某个成分的数字或名称来访问列表中的元素 - list(name1 = object1, name2 = object2)
- 通过双重括号
|
|
结构判断
str():返回对象整体的数据结构
class():返回单个对象格式/类型
mode():返回对象模式
dim():返回对象维度
summary():统计摘要;区别对待不同类型的数据变量- (1)数值型:相关极值等信息;(2)名义型/有序型:显示的是各水平的频数值
数据类型
因子
变量类别型变量(名义型、有序型)和连续型变量;
- 名义型变量:没有顺序之分的 [类别型] 变量
- 有序型变量:一定顺序的 [类别型] 变量
- 连续型变量:呈现某个范围内的任意值,并同时表示了顺序和数量。
- [名义型、有序型] 变量在R中称为 [因子] (factor)
- 函数factor() 以一个整数向量的形式存储类别值,范围为[1..k](k是名义型变量中唯一值的个数),同时一个字符串(原始值)组成的 内部向量 将映射到这些整数上
- facotr(x, ordered=FALSE, levels=c(), labels=c(), exclude=NA):
ordered = FALSE(默认);若为TRUE,则为有序型变量
- 对字符型向量,默认顺序按 英文字母顺序创建 [a-z]
levels=c():覆盖默认排序的顺序;保证指定的水平与数据中的真实值相匹配,因为任何在数据中出现而未在参数列举中的数据都会被设为缺失值
labels=c():将有序型变量转化为名义型变量;
- 标签的顺序必须和因子水平的顺序相一致;
- 所有不一致的变量将被设为缺失值NA
exclude =NA:转变为因子时排除在外的变量,即不参与有序化;
|
|
语句
diabetes <- factor(diabetes)将此向量存储为(1,2,1,1)(以一个整数向量的形式存储类别值,范围为[1..k]),并在内部将其关联为 1 = type1 和 2 =type2(具体赋值根据字母顺序而定)针对向量diabetes进行的任何分析都会将其作为名义型变量对待,并自动选择适合这一测量尺度的统计方法
语句
status <-factor(status, ordered=T)将向量存储为(3,2,1,3),并在内部关联为 1=excellent, 2=improved, 3=poor
数据类型 & 转换
数值型 -
is.numeric()&as.numeric()- 整数型
is.integer()&as.integer() - 双精度型
is.double()&as.double()
- 整数型
- 字符串形式
is.character()&as.character() - 日期形式:
is.Date() & as.Date();is.datetime() & as.datetime() - 逻辑型
is.logical()&as.logical() - 因子型
is.factor()&as.factor()
as.factor(x) – 只能对整个数据/列进行转换,其中无法插入其他语法
在作图时因子化需用
factor
- 向量型
is.vector()&as.vectro() - 矩阵型
is.matrix()&as.matrix() - 数组型
is.array()&as.array() - 数据框型
is.data.frame()&as.data.frame()
|
|
数据选取
元素选取
负号表示排除
|
|
逻辑选取
- 逻辑选取,后端运行分为两步
- 根据已有的条件对每个对象进行判断,结果为TRUE或FALSE
- 指定某个对象中提取为TURE的值
- 该对象的类型必须与条件判断的对象类型相同 或者说 前的范围必须 $\le$ 后者;
mtcars$wt[mtcars$carb==2]:选取carb为2的wt列;注意,wt与carb的对象均为列;
mtcars[mtcars$carb==2]:会报错,提示undefined columns selected;此时前者范围大于后者;因为mtcars有n列,但逻辑为TRUE的只有一列,无法判断应该选取哪一列,故报错。
mtcars$carb[mtcars>2]: 可以运行;不满足的部分用NA显示
|
|
子集选取 - subset
- subset(x, subset, select, drop = FALSE, …) :
- S3 method for class ‘data.frame’
subset :选取的逻辑表达式;选取条件
select :选择的列
|
|
删除变量 - rm()
列表的批量操作
do.call(what, arg):对每个列表中元素进行合并
- 告诉list一个函数,然后list里的所有元素来执行这个函数。
相当于是列表list的apply函数
what : 一个函数 / 函数的对象名
arg : 一个列表list
|
|
基础函数
数学函数
- abs()
- round(x, digits=2):代表保留小数位数的位数;
- signif(x,digits=2):代表保留的有效位数
|
|
实用函数
- length(x):R的对象、一个向量或因子;对象x的长度
- seq(from, to, by):生成一个序列
- rep(x, n):将x重复n次
- cut(x, n):将连续型变量分为n个水平的因子
- ptetty(x, n):将连续型变量分为n个区间
- cat(…, file=”myfile”, append=FALSE):连接…的对象,并将其输出到屏幕上或文件中
|
|
cat( ) 与 paste( ) 相同与区别
- 区别:
- paste( ) 对应的列单独合并
- cat( ) 合并为一个单元格
123456 > paste(c("X","Y"),1:10,sep="")> # [1] "X1" "Y2" "X3" "Y4" "X5" "Y6" "X7" "Y8" "X9" "Y10">> cat(c("X","Y"),1:10,sep="")> # XY12345678910>
funs的用法
- 直接在函数中写明需要运行的函数
summarise(., vars(), mean) - 结合funs写出调用的函数
summarise(., vars(), funs(mean))
|
|
控制流
重复和循环
若需多个操作,可用大括号
{}括起来
- for结构 :
for (var in seq) statement- 循环执行某语句statement,直到某个变量var的值不在包含在序列seq中为止
|
|
- while结构 :
while (cond) statment- 必须确保cond中的条件语句能【被改变】(即它在某个时刻不在为真),否则循环将永不停止
|
|
条件执行
表示相等
==R的多条件嵌套,必须要用大括号
{}括起来,各条件之间用分号;隔开;而非python的换行缩进即可;
1234567891011121314151617181920212223242526272829303132333435363738 > b <- 1723> for (i in 1720:b){> print(i);print('--');> for (a in (i+1):1723) { # 若写为 i+1:1723 默认为 i + (1:1723)> print(i);print(a);print('==')> }> }> [1] 1720> [1] "--"> [1] 1720> [1] 1721> [1] "=="> [1] 1720> [1] 1722> [1] "=="> [1] 1720> [1] 1723> [1] "=="> .....> [1] 1723> [1] "--"> [1] 1723> [1] 1724 # 这里超出了上限; 可通过if 判断 if (a<=1723) {}> [1] "=="> [1] 1723> [1] 1723> [1] "==">> # -------------修改后> b <- 1723> for (i in 1720:b){> print(i);print('--');> for (a in (i+1):1723) { # 若写为 i+1:1723 默认为 i + (1:1723)> if (a<=1723) {> print(i);print(a);print('==')}> }> }>
>
- if (cond) statment
- if-else结构:
if (cond) statement或者for (cond) statement1 else statement2
|
|
- ifelse结构:
ifelse(cond, statement1, statement2)
|
|
In while (i <= 10) { … :
报错:the condition has length > 1 and only the first element will be used这里你的i应该是个向量,用 i <= 10来做条件的时候会出现很多个TRUE和FALSE,系统选用第一个作为标准
- switch结构:根据一个表达式的值选择语句执行
switch(expr,...)
expr之后的…是expr的可能取值,后接等号(=),表示执行的行为
switch语句中,不同条件末尾要有 [逗号]
若expr为文本形式,输入时需加 [引号]
|
|
逻辑判断
- which(): 返回为真的逻辑对象,允许对数组array使用
应用
- 下一个值减去上一个值,若差值大于等于x,则把该值为初始值,后续的值减去该初始值
|
|
自编函数
- 结构
|
|
关于报错
- This function should not be called directly :该函数在多个包中有同样的名字
- 指定某个包的函数 dplyr::summarise()
- 移除某个包 detach(package:plyr)
- 需要TRUE/FALSE值的地方不可以用缺少值:if得到的必须是TRUE/FALSE,你可能得到了NA
- 在写if语句时,可以先判断一下是不是会有NA返回值:
识别NaN的方法是:is.na(x)
- 在写if语句时,可以先判断一下是不是会有NA返回值:
- as.POSIXct.numeric(value) : “origin” 一定得给值
-
符号的使用
基本符号
( )定义函数的参数( )在运算中作为优先级[ ]用做对象的元素索引{ }作为代码段落的起止%in%表示包含
- 用分号
;来分隔两个代码;
|
|
常见符号
写正则表达式的pattern时,要用两个转义符来进行转义
\\,因为r中一个\本身就是转义符的意思Windows下路径要用斜杠
/或者双反斜杠\\,原因同上
| 名称 | 作用 | 示例 |
|---|---|---|
| <- | 赋值符号 | |
| \ | 转义符 | |
| [ ] | 给定元素所处位置的数值 | a[c(2,4)] |
| : | 用于表示一个数值序列 | a[2:6] |
| [i,j] | 选择指定的行与列 | [i,][,j] [i,j][,] |
| “” | 用于目录名、文件名、包 | |
| ‘ ‘ | 引用双引号的文字为文本时出现 | labs(title=’ positon=”fill” ‘) |
| # | 用于注释。#之后出现的任何文本都会被R解释器忽视; 并且R只能对单行进行注释,故当出现多条命令符,需在每行前面加上# | |
| $ | 选取一个给定数据框中的某个特定变量 | patientIDdata$age |
| <<- | 特殊赋值符 | |
| [[ ]] | 用于列表中选取对象 | mylist[[“ages”]] mylist[[2]] |
| ^或** | 求幂 | |
| x% %y | 求余数(x mod y) 5%%2=1 | |
| x% / %y | 整数除法。5%/2%=2 | |
| == | 严格等于(在浮点型数值时慎用==) | 2+2==4 |
| != | 不等于 | |
| !x | 非x | |
| x∣y | x或y | |
| x&y | x和y | |
| isTRUE(x) | 测试x是否为TRUE | |
| [,-1][-1,] [,c(-2,-3)]/[,-c(2,3)] | 删除第一列 删除第一行 删除多列,两种表达方式均可 | mydata<-mydata[,-1] mydata<-mydata[,-c(2,3)] |
| “[“ | 提取谋而对象一部分的函数,后跟序列数n;1表示该对象的第一部分; 2表示该对象的第二部分; |
日期格式
| 符号 | 含义 | 示例 |
|---|---|---|
| %Y | 2007 | |
| %y | 07 | |
| %m | 00~12 | |
| %d | 01~31 | |
| %B | January | |
| %b | Jan | |
| %A | Monday | |
| %a | Mon |
R中常见表达式
| 符号 | 作用 | 示例 | 解释 | |
|---|---|---|---|---|
| ~ | 分隔符号 | y~x+z+w | 左边-因变量/响应变量 右边-自变量/解释变量 | |
| + | 分隔预测变量 | |||
| : | 预测变量的交互项 | y~x+z+x:z | ||
| * | 所有可能交互项的表达方式 | y~xzw—y~x+z+w+x:z+x:w+z:w | ||
| ^ | 交互项的某个次数 | y~(x+z+w)^2—y~x+z+w+x:z+x:w+z:w | 交互项最高次为2次 | |
| . | 包含除因变量之外的所有变量 | y~.—y~x+z+w | 当一个数据框包含y,x,z,w这四个变量时 | |
| - | 减号,从等式中移除某个变量 | y~(x+z+w)^2-x:w— y~x+z+w+x:z+z:w | ||
| -1 | 删除截距项 | y~x-1 | 拟合y在x上的回归,并强制直线通过原点 | |
| I() 【大写的i】 | 从算术(而非表示式)的角度来解释括号中的元素 | y~x+I((z+w)^2) | 表示的是x+(z+w)²,而非x+z+w+z:w | |
| function | 可以在表达式中运用的数学函数 | log(y)~x+z+w | ||
| mpg ~ wt \ | cyl | 表示按条件(cyl)绘图; | 即按cyl的水平为【分组条件】分别绘制mpg和wt的关系图 |
研究设计表达式
| 表达式 | 作用 | 解释 |
|---|---|---|
| y~A | 单因素ANOVA | 1.小写字母,定量变量 2.大写字母,组别因子(若不转换为factor,则默认为定量协变量) 3.Subject,被试者独有的标志变量 4.Error(Subject/A),表示组内因子 |
| y~x+A | 含单个协变量的单因素ANCOVA | |
| y~A * B | 双因素ANOVA | 展开为 ~A+B+A:B |
| y~x1+x2+A*B | 含两个协变量的双因素ANCOVA | |
| y~B+A(B是区组因子) | 随机化区组 | |
| y~A + Error(Subject/A) | 单因素组内ANOVA | |
| y~B*W+Error(Subject/W) | 含单个组内因子(W)和单个组间因子(B)的重复测量ANOVA | 展开为 ~B+W+B:W |
字符规则
| 引用符 | 字符 | 含义 |
|---|---|---|
| Quotes | \n | newline;换行 |
| Quotes | \r | carriage return |
| Quotes | \t | tab;制表符 |
| Quotes | \b | backspace;空格 |
| Quotes | \a | alert (bell) |
| Quotes | \f | form feed |
| Quotes | \v | vertical tab |
| Quotes | \ | backslash \ |
| Quotes | \’ | ASCII apostrophe ‘(单引号) |
| Quotes | \” | ASCII quotation mark “(双引号) |
| Quotes | ` | ASCII grave accent (backtick) ` |
| Quotes | \nnn | character with given octal code (1, 2 or 3 digits) |
| Quotes | \xnn | character with given hex code (1 or 2 hex digits) |
| Quotes | \unnnn | Unicode character with given code (1–4 hex digits) |
| Quotes | \Unnnnnnnn | Unicode character with given code (1–8 hex digits) |