如何计算与R中另一列中每个值对应的列中每个值的频率?

时间:2015-05-29 07:47:37

标签: r aggregate

我有一个数据集如下:

 col1   col2
    A   1
    A   2
    A   2
    B   1
    B   1
    C   1
    C   1
    C   2

我希望输出为:

 col1  col2  Frequency
    A     1      1
    A     2      2
    B     1      2
    C     1      2
    C     2      1

我尝试使用聚合函数和表函数,但我无法获得所需的结果。

2 个答案:

答案 0 :(得分:5)

您可以添加虚拟列或使用rownames聚合:

aggregate(rownames(mydf) ~ ., mydf, length)
#   col1 col2 rownames(mydf)
# 1    A    1              1
# 2    B    1              2
# 3    C    1              2
# 4    A    2              2
# 5    C    2              1

table也可以正常工作,但会将可能不在您数据中的组合报告为“0”:

data.frame(table(mydf))
#   col1 col2 Freq
# 1    A    1    1
# 2    B    1    2
# 3    C    1    2
# 4    A    2    2
# 5    B    2    0
# 6    C    2    1

另一个不错的方法是使用“data.table”:

library(data.table)
as.data.table(mydf)[, .N, by = names(mydf)]

答案 1 :(得分:2)

如果您的数据是

col1 <- c("A","A","A","B","B","C","C","C")
col2 <- c(1,2,2,1,1,1,1,2)
df <- data.frame(col1,col2)

您可以使用dplyr

1)group_by这两个变量,因为你的输出应该包括它们的每个组合

2)使用n()

计算每组的观察次数
library(dplyr)
df %>% group_by(col1,col2) %>% summarize(frequency=n())


# output
  col1 col2 frequency
1    A    1         1
2    A    2         2
3    B    1         2
4    C    1         2
5    C    2         1