【问题标题】:r - maximum number of unique elements occurring for a given value in matrixr - 矩阵中给定值出现的唯一元素的最大数量
【发布时间】:2015-05-15 10:13:16
【问题描述】:

假设我有一个这样的数据框:

> id = c(1,1,1,1,1,2,2,2,3,3)
> type = c("a","a","b","c","a","a","b","c","a","c")
> data = data.frame(id,type)
> data
   id type
1   1    a
2   1    a
3   1    b
4   1    c
5   1    a
6   2    a
7   2    b
8   2    c
9   3    a
10  3    c

我想知道每个 id 的 unique 类型的最大数量是多少,但 不是 值中的最大值。基础包装中是否有一个衬里?谢谢。

【问题讨论】:

    标签: r matrix count unique


    【解决方案1】:

    你可以试试

     library(data.table)#v1.9.5+
     setDT(data)[, list(type=uniqueN(type)) ,id]
    

    或者

     library(dplyr)
     data %>%
        group_by(id) %>%
        summarise(type= n_distinct(type))
    

    或使用base R

      aggregate(type~id, data, FUN=function(x) length(unique(x)))
    

    【讨论】:

    • @Marius 你可以使用aggregate(Type~id, data, FUN=function(x) length(unique(x)))
    • 是的。与聚合一起使用,然后我只从聚合列中获取最大值。谢谢。您能否在问题的答案中添加聚合解决方案,以便我可以将其标记为官方答案。再次感谢
    • @akrun 我在尝试使用 data.table 脚本时收到此错误:Error in [.data.table(setDT(data), , list(type = uniqueN(type)), id) : could not find function "uniqueN"
    • @plafort 我正在使用develdata.table 版本。我认为uniqueN是在开发版中引入的
    【解决方案2】:

    这行看起来很复杂的代码可以帮你解决问题:

    apply(table(data), MARGIN = 1, FUN = function(x)names(which(x==max(x))))

    让我分解代码以使其更简单。

    我们可以使用table(data) 来获取数据帧的摘要 - 每个 id 中唯一类型的计数。这是sn-p上面运行的结果。

        type
    id  a b c
      1 3 1 1
      2 1 1 1
      3 1 0 1
    

    所以我们可以看到,id 1 中有 3 个 a,而 id 2 各有 1 个,a、b 和 c,依此类推。

    现在,转到复杂代码 - 它只会给出每个 id 具有最大计数的 col-names(type)。 查看applywhich 的帮助

    我希望这能回答这个问题。 如果您需要进一步澄清,请告诉我。

    编辑:运行一个班轮的结果如下:

    $`1`
    [1] "a"
    
    $`2`
    [1] "a" "b" "c"
    
    $`3`
    [1] "a" "c"
    

    即,在每个 id 中输入最大计数 那是你问的,不是吗?

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2015-10-25
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多