【问题标题】:count unique values of a column for a given column in r计算 r 中给定列的列的唯一值
【发布时间】:2015-08-26 18:16:50
【问题描述】:

我有一个类似的数据框

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

最好的单线解决方案是什么?

【问题讨论】:

  • aggregate(col3~., df, function(x) length(unique(x)) ) 但您想要的输出是错误的——第二行的 col3 只有一个唯一值。
  • @Frank 对此感到抱歉。纠正它。并感谢您的解决方案。
  • @maj 对不起,我其实一点也不知道;并且只是通过反复试验来查看?aggregate 文档底部的示例。我总是为此使用 data.table:setDT(df)[, uniqueN(col3), by=.(col1,col2)]
  • [当我发现公式中的点的解释时,我刚刚删除了我之前的评论。我的评论大意是“您能解释一下您使用的公式吗?”] @Frank:谢谢。
  • @akrun 我对有人采用这些变体并将它们放入答案没有任何问题。不过,q 可能是个骗子,所以我自己不会那么努力。

标签: r reshape


【解决方案1】:

正如@Frank 和@akrun 在他们的 cmets 中指出的那样,您的问题有几种可能的解决方案 - 以下是三个最常用的解决方案:

在基础 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))

【讨论】:

    【解决方案2】:

    其他两个选项:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      相关资源
      最近更新 更多