如何计算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
我有一个数据集如下:
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