r - 如何获取所有少于特定水平数的因子变量的表格?

标签 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) } 
}

最佳答案

如示例所示,没有 factor变量并且都是数字,我们可以使用 lapply 循环遍历列并获取table if lengthunique元素小于 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)

关于r - 如何获取所有少于特定水平数的因子变量的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37895493/

相关文章:

r - 如何识别随机森林公式名称中的数字?

r - 为什么数据帧上的 is.vector 不返回 TRUE?

r - 在应用结果上设置名称

r - 忽略示例函数中的值或 NA

python - 将多列添加到 pandas 数据框

r - 如何在R中安装tcltk?

r - 将多个数据框中的行名称转换为数据框中的列

r - 如何更改ggtern中长轴标题的位置?

python - 并行化 Pandas 应用

r - 为什么 apply 将数据帧中的逻辑转换为 5 个字符的字符串?