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) |