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 都有最大计数。
查看 apply
和 which
的帮助
我希望这能回答问题。
如果您需要进一步说明,请告诉我。
编辑:运行一个班轮的结果如下:
$`1`
[1] "a"
$`2`
[1] "a" "b" "c"
$`3`
[1] "a" "c"
即在每个id中输入最大计数
这就是你问的,不是吗?
假设我有这样一个数据框:
> 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 都有最大计数。
查看 apply
和 which
我希望这能回答问题。 如果您需要进一步说明,请告诉我。
编辑:运行一个班轮的结果如下:
$`1`
[1] "a"
$`2`
[1] "a" "b" "c"
$`3`
[1] "a" "c"
即在每个id中输入最大计数 这就是你问的,不是吗?