因此,我尝试为数据框中少于 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) }
}
最佳答案
如示例所示,没有 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)
关于r - 如何获取所有少于特定水平数的因子变量的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37895493/