r - 矩阵中给定值出现的唯一元素的最大数量

r - maximum number of unique elements occurring for a given value in matrix

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

> 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 类型的最大数量是多少,但 NOT 是这些值中的最大值。基本包装中是否有一个衬垫?谢谢。

你可以试试

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

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

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

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

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

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

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

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

的帮助

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

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

$`1`
[1] "a"

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

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

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