我有一个像
这样的数据框col1 col2 col3
A 2 b1
A 3 b2
A 2 b2
A 2 b1
A 3 b2
我想获得col1和col2的每个组合的col3唯一值的计数,如下所示
col1 col2 count_unique
A 2 2
A 3 1
对此最佳的一线解决方案是什么?
答案 0 :(得分:3)
正如@Frank和@akrun在他们的评论中指出的那样,你的问题有几种可能的解决方案 - 这里有三个最常用的解决方案:
基础R中的:
aggregate(col3~., df, function(x) length(unique(x)) )
使用data.table包(v1.9.5及更高版本):
setDT(df)[, uniqueN(col3), by=.(col1,col2)]
使用dplyr包:
df %>% group_by(col1, col2) %>% summarise(col3=n_distinct(col3))
答案 1 :(得分:1)
其他两个选项:
library(plyr)
count(unique(df), vars = c("col1", "col2"))
输出:
col1 col2 freq
1 A 2 2
2 A 3 1
library(sqldf)
sqldf("SELECT col1, col2, COUNT(DISTINCT(col3)) n
FROM df GROUP BY col1, col2")
输出:
col1 col2 n
1 A 2 2
2 A 3 1