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
我想为数据框中的每一列获取单向频率 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