前言:近段时间学习R语言用到最多的数据格式就是data.frame,现对data.frame常用操作进行总结,其中函数大部分来自dplyr包,该包由Hadley Wickham所作,主要用于数据的清洗和整理。
一、创建
data.frame创建较为容易,调用data.frame函数即可。本文创建一个关于学生成绩的数据框,接下来大部分操作都对该数据框进行,其中学生成绩随机产生
1 > library(dplyr) #导入dplyr包 2 > options(digits = 0) #保留整数 3 > set.seed(1) #设置种子函数 4 > df <- data.frame(ID = 1:12, #ID 5 + Class = rep(c(1,2,3),4), #班级 6 + Chinese = runif(12,min = 0,max = 100), #语文 7 + Math = runif(12,min = 0,max = 100), #数学 8 + English = runif(12,min = 0,max = 100)) #英语 9 > for (i in 1:ncol(df)) { 10 + df[,i] <- as.integer(df[,i]) #将每列类型变为integer型 11 + }
df结果如下
1 > df 2 ID Class Chinese Math English 3 1 1 1 26 68 26 4 2 2 2 37 38 38 5 3 3 3 57 76 1 6 4 4 1 90 49 38 7 5 5 2 20 71 86 8 6 6 3 89 99 34 9 7 7 1 94 38 48 10 8 8 2 66 77 59 11 9 9 3 62 93 49 12 10 10 1 6 21 18 13 11 11 2 20 65 82 14 12 12 3 17 12 66
二、 查询
1、查询某一行或某一列
可通过 data.frame[行号,] 或者 data.frame[,列号] 操作完成
其中 data.frame[行号,] 得到的类型是数据框
而 data.frame[,列号] 得到的类型是该列的类型
> df[2,] ID Class Chinese Math English
2 2 2 37 38 38 > df[,4] [1] 68 38 76 49 71 99 38 77 93 21 65 12
查询某一列还可以通过 data.frame$列名 操作完成
> df$Chinese
[1] 26 37 57 90 20 89 94 66 62 6 20 17
data.frame[列号] 得到一个仅包含该列内容的数据框
1 > df[3] 2 Chinese 3 1 26 4 2 37 5 3 57 6 4 90 7 5 20 8 6 89 9 7 94 10 8 66 11 9 62 12 10 6 13 11 20 14 12 17
若要查找符合条件的行,可采用 which() 函数,得到的类型是数据框
> df[which(df$ID == 4),]
ID Class Chinese Math English
4 4 1 90 49 38
2、查询某一个值
可通过 data.frame[行号,列号] 或 data.frame[行号,‘列名’] 操作完成
> df[3,4] [1] 76 > df[3,'Math'] [1] 76
若查找符合条件的值,可采用 which() 函数
> df[which(df$Chinese == 57),'Math'] #查询语文成绩为57的同学的数学成绩 [1] 76 > df[which(df$Class == 2),'English'] #查询班级号为2的同学的英语成绩 [1] 38 86 59 82
三、修改
1、修改某一行或列
> df[1,] <- c(1,2,65,59,73) #修改第一行 #修改英语成绩 > df[,'English'] <- c(23,45,67,87,34,46,87,95,43,76,23,94)
修改后结果为(1号同学英语成绩先由26修改为73,再修改为23)
1 > df 2 ID Class Chinese Math English 3 1 1 2 65 59 23 4 2 2 2 37 38 45 5 3 3 3 57 76 67 6 4 4 1 90 49 87 7 5 5 2 20 71 34 8 6 6 3 89 99 46 9 7 7 1 94 38 87 10 8 8 2 66 77 95 11 9 9 3 62 93 43 12 10 10 1 6 21 76 13 11 11 2 20 65 23 14 12 12 3 17 12 94
2、修改某一个值
直接将需要修改后的值赋给上述查询某一个值的操作即可
1 > df[3,'Chinese'] <- 65 #将3号同学的语文成绩修改为65 2 #将语文成绩低于20的同学的语文成绩修改为20 3 > df[which(df$Chinese < 20),'Chinese'] <- 20 4 > df 5 ID Class Chinese Math English 6 1 1 2 65 59 23 7 2 2 2 37 38 45 8 3 3 3 65 76 67 9 4 4 1 90 49 87 10 5 5 2 20 71 34 11 6 6 3 89 99 46 12 7 7 1 94 38 87 13 8 8 2 66 77 95 14 9 9 3 62 93 43 15 10 10 1 20 21 76 16 11 11 2 20 65 23 17 12 12 3 20 12 94
3、修改行列名
可用rownames()及colnames()得到数据框的行列名,rownames(data.frame)[行号] 或 colnames(data.frame)[列号] 可得到指定位置的行名或者列名,若修改直接赋值给该变量即可
1 > colnames(df) #查询列名 2 [1] "ID" "Class" "Chinese" "Math" "English" 3 > colnames(df)[4] #查询第4列列名 4 [1] "Math" 5 > colnames(df)[4] <- "math" #修改第4列列名为math 6 #修改列名 7 > colnames(df) <- c("ID","Class","Chinese","Math","English")
四、删除
删除行或列,仅需要选出该数据框的部分行或列,然后将其赋给该变量即可,其中在列号或行号前添加-表示不选该行或该列,在这里,为了方便接下来的操作,我们将选出后的数据框赋给其他变量,要实现删除操作应当将选出后的数据框赋给自己
1 #选出df第1、3、5列 ( df <- df[,c(1,3,5)] ) 2 > df.tmp <- df[,c(1,3,5)] 3 > df.tmp 4 ID Chinese English 5 1 1 65 23 6 2 2 37 45 7 3 3 65 67 8 4 4 90 87 9 5 5 20 34 10 6 6 89 46 11 7 7 94 87 12 8 8 66 95 13 9 9 62 43 14 10 10 20 76 15 11 11 20 23 16 12 1