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

How to calculate the frequency of each value in a column corresponding to each value in another column in R?

我有一个数据集如下:

 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

我尝试使用聚合函数和 table 函数,但我无法获得想要的结果。

您可以添加虚拟列或使用 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)]

如果您的数据是

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