数据框类似矩阵,但是不同的列可以有不同的模式(mode)。正如列表可以类比一维向量,儿数据框可以类比二维数据的矩阵
5.1 创建数据库
kids <- c("jack","jill")
ages <- c(12,10)
d <- data.frame(kids,ages,stringsAsFactors = FALSE) #方法1
d
d <- data.frame(list(gender = c("M","F","M","F","F"),age = c(47,21,20,32,33),income = c(55000,88000,32450,76500,12300))) #方法2
结果:
5.1.1 数据框的索引
数据框是列表的扩展,访问的方式差不多。
其他子矩阵的操作 和矩阵一样,这里就不再赘述。注意当提取出来的子矩阵是一列时,需要设置参数:drop=FALSE 否则会得到向量而不是数据框!这里和矩阵(防止意外降维)方法也一样
d[[1]]
d$kids
d[,1]
结果:
str()函数可以查看数据框的内部结构
5.2 数据框的操作
5.2.1 数据框元素的筛选
和矩阵一样
5.2.2 缺失值的处理
一、na.rm = TRUE
x <- c(2,NA,4)
mean(x)
mean(x,na.rm = T)
结果:
二、subset()函数
不用自己设置na.rm = TRUE,可以应用在数据框中用于选择行
kids <- c("jack","jill",'Amy')
ages <- c(12,10,NA)
d <- data.frame(kids,ages,stringsAsFactors = FALSE)
z <- subset(d,ages>10)
z
三、complete.cases()函数
直接把数据框中的缺失值去掉了
kids <- c("jack","jill",'Amy')
ages <- c(12,10,NA)
d <- data.frame(kids,ages,stringsAsFactors = FALSE)
d5 <- d[complete.cases(d),]
d5
结果:
5.2.3 使用rbind()和cbind()等函数
和矩阵一样!
5.2.4 使用apply()函数
5.3 合并数据框
5.3.1 merge(x,y)
合并两个数据框
kids <- c("Jack","Jill","Jillian","Jhon")
states <- c("CA","MA","MA","HI")
d1 <- data.frame(kids,states,stringsAsFactors = FALSE)
d1
kids <- c("Jack","Jill","Jillian","Jhon")
ages <- c(1,2,3,4)
d2 <- data.frame(kids,ages,stringsAsFactors = FALSE)
m <- merge(d1,d2)
m
注意:会丢到有空值的:
kids <- c("Jack","Jill","Jillian","Jhon","cc")
states <- c("CA","MA","MA","HI","HI")
d1 <- data.frame(kids,states,stringsAsFactors = FALSE)
d1
kids <- c("Jack","Jill","Jillian","Jhon","Amy")
ages <- c(1,2,3,4,5)
d2 <- data.frame(kids,ages,stringsAsFactors = FALSE)
m <- merge(d1,d2)
m
结果:
5.4 应用于数据框的函数
lapply和sapply
lapply作用在数据框中的每一列,然会返回值存储在列表中
sapply返回向量,这和列表是一样的。