我想为我的数据框中的每一列获取一个单向频率表(每列中每个唯一值的计数)。我关注this tutorial,建议使用plyr
包中的count()函数。
for (col in mtcars[c("gear","carb")]){
freq <- count(col)
write.table(freq, file='filename.txt')
}
我希望输出看起来像这样:
gear freq
1 3 15
2 4 12
3 5 5
而是将列名替换为“x”:
x freq
1 3 15
2 4 12
3 5 5
为什么会发生这种情况,如何修改for循环以便打印列名而不是'x'?
(除了使用for循环之外,还有一种更好的矢量化方法可以做到这一点,但我是R的新手,并且无法弄清楚语法。)
答案 0 :(得分:2)
在for
循环中:
for (col in c("gear","carb")){
print(plyr::count(mtcars, col))
}
使用lapply()
:
lapply(c("gear","carb"), function(col) plyr::count(mtcars, col))
要明确,count
不会重命名任何内容。在你的循环中,它接收col
这是一个向量。向量没有列名,因此count
不知道它应该使用什么名称。它使用x
作为占位符。
答案 1 :(得分:1)
这也可以(数据集mtcar的列名作为输入,结果作为数据帧列表):
lapply(c("gear","carb"), function(x){df <- as.data.frame(table(mtcars[x])); names(df) <- c(x, 'freq'); df})
[[1]]
gear freq
1 3 15
2 4 12
3 5 5
[[2]]
carb freq
1 1 7
2 2 10
3 3 3
4 4 10
5 6 1
6 8 1