距离上一次分享又过了一段时间,要坚持真的不容易,所以自律真的是人身上非常重要的品质。继续捡回R语言编程艺术系列,这真的是一本不错的R语言经典书籍,有很多细节值得细细思考。话不多说,开始第五章数据框的笔记。
1.数据框的创建
data.frame()用来创建数据框,函数包含参数如下:
data.frame(..., row.names = NULL, check.rows = FALSE,check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors()),...代表数据框的数据源,默认行名称为空,默认字符串作为因子,实际上字符串更多作为向量,因此在建立数据框时,应该使用stringAsFactors=FALSE,举个例子:
> employee<-c("Tom","Jack","Judy")
> salary<-c(3000,6000,5000)
> staff<-data.frame(employee,salary,stringsAsFactors =FALSE)
> staff
employee salary
1 Tom 3000
2 Jack 6000
3 Judy 5000
2.数据框的访问
1)通过索引,比如要访问第一列数据,可以是:staff[[1]],或者staff[,1];
2)通过组件名,staff$employee,第二种方法用$最为简单直接
3.提取子数据框
两种方法:
1)按行或者列进行提取,通过使用[ ],完成操作“,”前面指操作行,后面指操作列
> staff[1,]
employee salary
1 Tom 3000
2)使用subset()函数,subset函数第一个参数指数据框,第二参数指需要筛选的条件
> subset(staff,staff$salary>3000)
employee salary
2 Jack 6000
3 Judy 5000
4.数据框合并
rbind()指按行合并,cbind()指按列合并,但是有条件,要求合并的两个数据框必须有相同的行或者列。
> rbind(staff,list("Lucy",9000))
employee salary
1 Tom 3000
2 Jack 6000
3 Judy 5000
4 Lucy 9000
利用$,增加数据会变得更加简单
> staff
employee salary
1 Tom 3000
2 Jack 6000
3 Judy 5000
> staff$age<-c(23,27,31)
> staff
employee salary age
1 Tom 3000 23
2 Jack 6000 27
3 Judy 5000 31
merge()是指根据某个条件合并数据框,并且会剔除重复项,比rbind和cbind稍微灵活点
> employee<-c("Alice","Tom")
> salary<-c(6500,3000)
> staff2<-data.frame(employee,salary,stringsAsFactors = FALSE)
> staff2
employee salary
1 Alice 6500
2 Tom 3000
> staff3<-merge(staff,staff2)
> staff3
employee salary age
1 Tom 3000 23
> staff3<-merge(staff,staff2,all=T)
> staff3
employee salary age
1 Alice 6500 NA
2 Jack 6000 27
3 Judy 5000 31
4 Tom 3000 23
上面列举了一个情况,当默认使用merge()函数时,相当于取了两个数据框的并集,因此例子中第一次合并只有一条数据,当设置all=T时,表示剔除重复项并且保留其他行数据,这里注意根据需求在处理时设置正确的用法。
5.数据框的函数应用
lapply()函数和sapply()函数,注意这两个函数均作用于列。
lapply(X, FUN, ...) 表示对数据框应用某个函数,会对数据框中的每一列都应用,最后输出列表
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE) 表示对数据框应用某个函数,会对数据框的每一列进行应用,并且可以将结果以列表、向量、矩阵或者多维矩阵的形式输出,sapply与lapply相比强调更多简单形式的输出结果,如下所示:
> d1<-lapply(staff2,sort)
> d1
$`employee`
[1] "Alice" "Tom"
$salary
[1] 3000 6500
> d1<-sapply(staff2,sort)
> d1
employee salary
[1,] "Alice" "3000"
[2,] "Tom" "6500"
第五章数据框的基础就是这么多,第六章因子和表再见!