如何获得具有少于特定级别数的所有因子变量的表格?

时间:2016-06-18 09:37:18

标签: r apply

所以我试图为我的数据框中少于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) } 
}

1 个答案:

答案 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并不好,因为它会将其转换为matrixmatrix只能保留characternumeric类,factor列强制转移到character,使用levels对此案件无效。我们可以使用lapply作为

lapply(df, function(x) if(is.factor(x) & nlevels(x) <3) table(x) else NA)