1. 文件导入
-
read.table 函数将文本文件读入R,并返回一个data.frame
image.png
image.png -
readline
image.png -
scan
image.png
image.png
image.png
2. 导出数据
-
write.table
image.png
3. 合并数据
-
paste 将多个字符型向量连接成一个向量,默认情况用空格分隔
image.png - cbind 按列合,增加列
- rbind 按行合,增加行
4. 通过共同字段合并数据
-
merge, 一般用于两个数据框类型的整合,默认把相同的变量作为键
image.png
> id1 <- c(2, 3, 4, 5, 7)
> heights <- c(62, 65, 71, 71, 67)
> df1 <- data.frame(id = id1, heights)
> id2 <- c(1, 2, 6:10)
> weights <- c(147, 113, 168, 135, 142, 159, 160)
> df2 <- data.frame(id = id2, weights)
# all=FALSE,取交集
> merge(df1, df2, all = FALSE)
id heights weights
1 2 62 113
2 7 67 135
> intersect(df1$id, df2$id)
[1] 2 7
# 取合集
> merge(df1, df2, by = "id", all = TRUE)
id heights weights
1 1 NA 147
2 2 62 113
3 3 65 NA
4 4 71 NA
5 5 71 NA
6 6 NA 168
7 7 67 135
8 8 NA 142
9 9 NA 159
10 10 NA 160
# all.x 指df1, all.y 指df2
> merge(df1, df2, by = "id", all.x = TRUE)
id heights weights
1 2 62 113
2 3 65 NA
3 4 71 NA
4 5 71 NA
5 7 67 135
# 想合并的index 大于两列
> df1$sex <- c("f", "m", "f", "f", "m")
> df2$sex <- c("f", "f", "m", "m", "f", "f", "f")
> merge(df1, df2)
id sex heights weights
1 2 f 62 113
2 7 m 67 135
> merge(df1, df2, by = c("id", "sex"))
id sex heights weights
1 2 f 62 113
2 7 m 67 135
> merge(df1, df2, by = "id")
id heights sex.x weights sex.y
1 2 62 f 113 f
2 7 67 m 135 m
5. 数据转换
- 有时候,原始数据中有些变量可能有问题,本节介绍数据框常规操作
ID=c(11,12,13)
Name=c("Devin","Edward","Wenli")
Gender=c("M","M","F")
Birthdate=c("1984-12-29","1983-5-6","1986-8-8")
student<-data.frame(ID,Name,Gender,Birthdate)
> student
ID Name Gender Birthdate
1 11 Devin M 1984-12-29
2 12 Edward M 1983-5-6
3 13 Wenli F 1986-8-8
row.names(student)<-student$ID # 建立行索引
student[1,] # 访问第一行
student[,2] # 访问第二列
idname<-student[1:2] == idname<-student[c("ID","Name”)] # 访问两列
student[[2]] == student[["Name"]] == student$Name # 访问name
# 同上
with(student,{
n<-Name
print(n)
})
# 改变向量类型
student$Name<-as.character(student$Name)
student$Birthdate<-as.Date(student$Birthdate)
# 增加一列
student$Age<-as.integer(format(Sys.Date(),"%Y"))-as.integer(format(student$Birthdate,"%Y”))
# 索引, 小括号里面返回逻辑变量,which true的指针
student[which(student$Gender=="F"),]
# 索引女性年龄
student[which(student$Gender=="F"),"Age”]
# subset 函数查询
subset(student,Gender=="F" & Age<30 ,select=c("Name","Age"))
5 转换函数
- transform 函数
- 作用: 为原数据框添加新的列,改变原变量列的值,通过赋值NULL删除列变量
用法: transform(‘data’,….)
data就是要修改的data, '…..'代表你要进行的修改
e.g
1:transform(airquality, new.col = Wind^2)
#添加列new.col,每项的值为Wind中每项值的平方
2: transform(airquality,Wind=NULL)
# 删除原数据集中的Wind列
3: transform(airquality,Wind=Month+Day)
#将原数据集中Wind列的数据改成Month列+Day列的值
## 同样的,上面的3步可以放在一起进行,即在一个括号里,依次写就好了
## 注意,transform只能用于修改data.frame类型
## airquality为R中自带的数据集
# transform可以用within函数代替,因为within还可以用在不是数据框格式的内容
里,上面的例子可以用within改写:
within(airquality,{new.col=Wind^2;rm(Wind);Wind=Wind^2})
#这里需要注意的是大括号里不同的任务要用分好";"隔开,不能用逗号,后者就
是两个任务在两行中,rm(变量名)和变量名=NULL是等价的,都是删除该列
- apply 函数
- apply 函数可以对一个数组的每一个部分运行同一个函数
- apply(X,MARGIN,FUN,...)
- apply 函数有3个参数:X 是函数要用到的数组,FUN是函数名称,MARGIN用来指定函数将要在数组的哪个维度上运行
> x<-1:20
> dim(x)<-c(5,4)
> x
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> apply(X=x, MARGIN=1,FUN=max) # 看第一行最大的数
[1] 16 17 18 19 20
x<-1:27
dim(x)<-c(3,3,3)
apply(X=x,MARGIN=1,FUN=paste,collapse=",") # 第一行粘贴
- lapply 函数允许在列表或者向量的每一个元素运行某个函数,并返回一个列表
- sapply 函数返回一个向量或者矩阵
> x<- as.list(1:5)
> lapply(x,function(x) 2^x)
[[1]]
[1] 2
[[2]]
[1] 4
[[3]]
[1] 8
[[4]]
[1] 16
[[5]]
[1] 32
> sapply(x,function(x) 2^x) # 返回一个向量或者矩阵
[1] 2 4 8 16 32
-
mapply 函数, 是多元版本的sapply
image.png
6. plyr 包
image.pngimage.png
image.png
image.png
7 数据分段
image.pngimage.png
image.png
网友评论