我的数据可以描述为......
factor1 <- c(rep("A", 5), rep("B", 5), rep("C", 5))
factor2 <- c("title1", "title1", "title2", "title2", "title3",
"title4", "title4", "title4", "title4", "title5",
"title6", "title6", "title6", "title6", "title6")
df <- data.frame(factor1, factor2)
...而我想要的是计算factor2
每个级别factor1
中出现的唯一值的数量。所以我在这种情况下的预期输出是:
A 3
B 2
C 1
效率最高的是什么(因为后来会涉及Shiny)这样做的功能是什么?我对table
或xtabs
或aggregate
的各种尝试都因两栏都是因素而被挫败。
答案 0 :(得分:2)
使用base-R的tapply
你可以这样做:
tapply(factor2, factor1, function(x) length(unique(x)))
结果
A B C
3 2 1
Usind data.table
你可以这样做:
require(data.table)
DT <- data.table(df)
DT[,uniqueN(factor2), factor1]
结果
factor1 V1
1: A 3
2: B 2
3: C 1
感谢@ytk提供有关使用uniqueN
答案 1 :(得分:0)
您可以使用unique
和table
:
table(unique(df)$factor1) # piped: df %>% unique() %>% `[`('factor1') %>% table()
## A B C
## 3 2 1
如果您想以长篇形式将表格转换为data.frame:
as.data.frame(table(unique(df)$factor1))
## Var1 Freq
## 1 A 3
## 2 B 2
## 3 C 1