所以我试图为我的数据框中少于3个级别的所有因子变量制作表格。
我目前的方法如下:
df=data.frame(a=1:10, b=as.factor(c(rep(1,5),rep(2,5))), c=as.factor(c(rep(1,3),rep(2,5),rep(3,2)))) ## Dataset
myfun = function(x) {
if(is.factor(x) && levels(x) < 3) {
table(x)
}
}
tab = apply(df, 2, myfun)
虽然这有效,但我可以使用lapply
做同样的事情吗?
使用apply函数,我们可以这样做:
myfun = function(x) {
if(length(unique(x)) < 3){ table(x) }
}
答案 0 :(得分:2)
如示例所示,没有factor
个变量并且都是数字,我们可以使用lapply
遍历列并获取table
if
length
} unique
元素小于3或else
返回NA。
lapply(df, function(x) if(length(unique(x)) < 3) table(x) else NA)
注意:基于OP的第一个例子。
如果存在实际factor
个变量,则使用apply
并不好,因为它会将其转换为matrix
而matrix
只能保留character
或numeric
类,factor
列强制转移到character
,使用levels
对此案件无效。我们可以使用lapply
作为
lapply(df, function(x) if(is.factor(x) & nlevels(x) <3) table(x) else NA)