如何聚合 R 中分类变量的唯一值计数
How to aggregate count of unique values of categorical variables in R
假设我有一个数据集data
:
x1 <- c("a","a","a","a","a","a","b","b","b","b")
x2 <- c("a1","a1","a1","a1","a1","a1","b1","b1","b2","b2")
data <- data.frame(x1,x2)
x1 x2
a a1
a a1
a a2
a a1
a a2
a a3
b b1
b b1
b b2
b b2
我想求 x1
对应 x2
的唯一值的个数
例如 a
只有 3 个唯一值(a1,a2
和 a3
)而 b
有 2 个值(b1
和 b2
)
我使用了 aggregate(x1~.,data,sum)
但它不起作用,因为这些是因子,而不是整数。
请帮忙
尝试
aggregate(x2~x1, data, FUN=function(x) length(unique(x)))
# x1 x2
#1 a 3
#2 b 2
或
rowSums(table(unique(data)))
或
library(dplyr)
data %>%
group_by(x1) %>%
summarise(n=n_distinct(x2))
或@Eric
建议的使用dplyr
的另一个选项
count(distinct(data), x1)
或
library(data.table)
setDT(data)[, uniqueN(x2) , x1]
更新
如果您同时需要 'x2' 的 unique
值和计数
setDT(data)[, list(n=uniqueN(x2), x2=unique(x2)) , x1]
或只有 unique
个值
setDT(data)[, list(x2=unique(x2)) , x1]
或使用dplyr
unique(data, by=x1) %>%
group_by(x1) %>%
mutate(n=n_distinct(x2))
仅适用于唯一值
unique(data, by=x1)
假设我有一个数据集data
:
x1 <- c("a","a","a","a","a","a","b","b","b","b")
x2 <- c("a1","a1","a1","a1","a1","a1","b1","b1","b2","b2")
data <- data.frame(x1,x2)
x1 x2
a a1
a a1
a a2
a a1
a a2
a a3
b b1
b b1
b b2
b b2
我想求 x1
对应 x2
例如 a
只有 3 个唯一值(a1,a2
和 a3
)而 b
有 2 个值(b1
和 b2
)
我使用了 aggregate(x1~.,data,sum)
但它不起作用,因为这些是因子,而不是整数。
请帮忙
尝试
aggregate(x2~x1, data, FUN=function(x) length(unique(x)))
# x1 x2
#1 a 3
#2 b 2
或
rowSums(table(unique(data)))
或
library(dplyr)
data %>%
group_by(x1) %>%
summarise(n=n_distinct(x2))
或@Eric
建议的使用dplyr
的另一个选项
count(distinct(data), x1)
或
library(data.table)
setDT(data)[, uniqueN(x2) , x1]
更新
如果您同时需要 'x2' 的 unique
值和计数
setDT(data)[, list(n=uniqueN(x2), x2=unique(x2)) , x1]
或只有 unique
个值
setDT(data)[, list(x2=unique(x2)) , x1]
或使用dplyr
unique(data, by=x1) %>%
group_by(x1) %>%
mutate(n=n_distinct(x2))
仅适用于唯一值
unique(data, by=x1)