如何为所有少于特定水平数的因子变量获得 table?

How to get a table for all the factor variables having less than a specific number of levels?

所以我正在尝试为我的数据框中少于 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 做同样的事情吗?

使用一个应用函数,我们可以这样做:

myfun = function(x) {
    if(length(unique(x)) < 3){ table(x) } 
}

如示例所示,没有 factor 变量并且都是数字,我们可以使用 lapply 遍历列并获得 table if [= unique 个元素中的 16=] 个小于 3 或 else return NA.

lapply(df, function(x) if(length(unique(x)) < 3) table(x) else NA)

注意:基于 OP 的第一个示例。

更新

如果实际上有 factor 变量,使用 apply 是不好的,因为它会将其转换为 matrixmatrix 只能容纳 characternumeric class 因此 factor 列强制转换为 character 并且在这种情况下使用 levels 将毫无用处。我们可以使用 lapply 作为

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