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

时间:2015-05-15 10:13:17

标签: r matrix count unique

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

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

2 个答案:

答案 0 :(得分:4)

你可以尝试

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

答案 1 :(得分:0)

这一系列复杂的代码可以帮到你:

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中有1个,a,b和c,依此类推。

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

的帮助

我希望这能回答这个问题。 如果您需要进一步澄清,请与我们联系。

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

$`1`
[1] "a"

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

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

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