R Learning-swirl-lapply and sapply

来源:互联网 发布:sun.java 编辑:程序博客网 时间:2024/06/03 14:45

head(flags) 取flags数据集的前六行记录
dim(flags) 调取flags数据集的行数与列数
calss(flags) 识别flags数据集的格式format
[1] “data.frame”

cls_list <- lapply(flags,class) 以list的形式呈现每个字段的属性
cls_list
$name
[1] “factor”
………
class(cls_list) cls_list的格式为list
[1]”list”
as.character(cls_list) 将cls_list 中的字段属性以向量的形式进行呈现。
[1] “factor” “integer” “integer” “integer” “integer” “integer” “integer” “integer” “integer” “integer”
…….
针对sapply,如果每个元素都是一样的字符,即不存在多个列表的时候,则sapply 为向量;如果对象为列表时,则sapply为矩阵。如果sapply不能识别对象中的内容,则只返回列表,与lapply的作用没有区别。
cls_vect <-sapply(flags,class) 将falgs中
class(cls_vect)

统计某个表中某个字段的个数:

sum(flags$oranges) 统计oranges下的总数

取某个报表中前多少行字段:取flags中第11:17字段的内容。
flags_colors <- flags[,11:17]

针对lapply(arg1,agr2),arg1表示本次处理的对象,agr2为函数名称(不用带括号)。

head(flag_colors)
red green blue gold white black orange
1 1 1 0 1 1 1 0
2 1 0 0 1 0 1 0
3 1 1 0 0 1 0 0
4 1 0 1 1 1 0 1
5 1 0 1 1 0 0 0
6 1 0 0 1 0 1 0
lapply(flag_colors,sum)
$red
[1] 153

$green
[1] 91

$blue
[1] 99

$gold
[1] 91

$white
[1] 146

$black
[1] 52

$orange
[1] 26
如果字段的内容都一致,则可以用sapply,则最终的结果可以以向量的形式进行展现。

sapply(flag_colors,sum)
red green blue gold white black orange
153 91 99 91 146 52 26
sapply(flag_colors,mean)
red green blue gold white black orange
0.7886598 0.4690722 0.5103093 0.4690722 0.7525773 0.2680412 0.1340206
注意:计算均值时,为0的数字也计算个数

lapply(flag_shapes,range) range 函数返回flag_shapes中的最小值和最大值,当然只针对数值型变量。
$circles
[1] 0 4

$crosses
[1] 0 2

$saltires
[1] 0 1

$quarters
[1] 0 4

$sunstars
[1] 0 50

但是如果用sapply来调用的话,
shape_mat <- sapply(flag_shapes,range)
circles crosses saltires quarters sunstars
[1,] 0 0 0 0 0
[2,] 4 2 1 4 50
总结,一般sapply 会比lapply有更简化的内容,但是也会存在sapply无法识别的情况,这时跟lapply没有区别。

unique()函数返回不重复的值, unique_vals <-lapply(flags,unique),返回flags数据集中各字段下不重复项。
lapply返回的是list,sapply 返回的是数据集
lapply(unique_vals,function(elem)elem[2]) 针对数据集,对数据集中每一个列中,取每列第二个元素。

0 0
原创粉丝点击