我有一个数据集如下:
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
我尝试使用聚合函数和表函数,但我无法获得所需的结果。
答案 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