如何为所有少于特定水平数的因子变量获得 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
是不好的,因为它会将其转换为 matrix
而 matrix
只能容纳 character
或 numeric
class 因此 factor
列强制转换为 character
并且在这种情况下使用 levels
将毫无用处。我们可以使用 lapply
作为
lapply(df, function(x) if(is.factor(x) & nlevels(x) <3) table(x) else NA)
所以我正在尝试为我的数据框中少于 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
是不好的,因为它会将其转换为 matrix
而 matrix
只能容纳 character
或 numeric
class 因此 factor
列强制转换为 character
并且在这种情况下使用 levels
将毫无用处。我们可以使用 lapply
作为
lapply(df, function(x) if(is.factor(x) & nlevels(x) <3) table(x) else NA)