【发布时间】:2022-07-15 23:37:21
【问题描述】:
假设以下 data.frame 包含有序因子列:
dat0 <- data.frame(X1 = 1:5, X2 = 1:5, X3 = c(1,1:4), X4 = c(2,2:5))
dat <- data.frame(lapply(dat0, factor, ordered=TRUE, levels=1:5, labels=letters[1:5]))
我想创建一个漂亮的表格来编译dat 的每一列中有多少 a:e。函数table() 是一个显而易见的选择。
我制作这张桌子的“干净”尝试不起作用。见下文:
table() 函数在应用于单个列时按预期工作(即,包括所有 5 个因素选择——即使一个或多个的计数为 0):
table(dat[,1])
a b c d e
1 1 1 1 1
table(dat[,3])
a b c d e
2 1 1 1 0
# note: that a 0 is provided for any factor missing
但是,当我尝试在 data.frame 上使用 apply() 函数将所有列计数包含到一个表中时,我得到的结果格式很奇怪:
apply(dat, 2, table)
$X1
a b c d e
1 1 1 1 1
$X2
a b c d e
1 1 1 1 1
$X3
a b c d
2 1 1 1
$X4
b c d e
2 1 1 1
我可以通过仅包含我的 data.frame 的列来证明问题的原因,这些列对于列之间相似的每个因素至少有 1 个计数。 (即,我可以通过删除任何因数为 0 的列来获得我想要的格式化结果):
apply(dat[1:2], 2, table) # only including columns of dat with all 5 letters (i.e., no 0 counts)
X1 X2
a 1 1
b 1 1
c 1 1
d 1 1
e 1 1
问题:使用table() 时是否有简单的解决方法/解决方案,或者我必须找到不同的方法?
- 注意:我知道我可以简单地
cbind()单个表结果,但这在我实际更复杂的数据集中非常乏味。
【问题讨论】:
-
在data.frame上使用
apply是不好的:R: Why am I not getting type or class "factor" after converting columns to factor?