freq() 在打印期间重命名列

freq() renames columns during printing

我想为数据框中的每一列获取单向频率 table(每一列中每个唯一值的计数)。我正在关注 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 的新手,不太了解语法。)

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 作为占位符。

这也适用(将数据集 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