假设我有一个这样的数据框:
> 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 是值中的最大值。基础包装中是否有一个衬垫?谢谢。
答案 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(类型)。
查看apply
和which
我希望这能回答这个问题。 如果您需要进一步澄清,请与我们联系。
编辑:运行一个班轮的结果如下:
$`1`
[1] "a"
$`2`
[1] "a" "b" "c"
$`3`
[1] "a" "c"
即,键入每个id中的最大计数 这就是你问的问题,不是吗?