在R中,如何根据另一个因子计算因子的唯一值?

时间:2016-07-14 19:45:27

标签: r

我的数据可以描述为......

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)这样做的功能是什么?我对tablextabsaggregate的各种尝试都因两栏都是因素而被挫败。

2 个答案:

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

您可以使用uniquetable

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