计算r中给定列的列的唯一值

时间:2015-08-26 18:16:50

标签: r reshape

我有一个像

这样的数据框
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

对此最佳的一线解决方案是什么?

2 个答案:

答案 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)

其他两个选项:

plyr

library(plyr)
count(unique(df), vars = c("col1", "col2"))

输出:

 col1 col2 freq
1    A    2    2
2    A    3    1

sqldf

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