table R 中的独特观察

table of unique observations in R

我有两个因子变量 - 在 data.frame 中称为 "data" - 看起来像这样:

brand  Country
 "A"    "ITA"
 "A"    "ITA"
 "C"    "SPA"
 "B"    "POR"
 "C"    "SPA"
 "B"    "POR"
 "A"    "ITA"
 "D"    "ITA"
 "E"    "SPA"
 "D"    "ITA"

并且我想要一个 table 列出 country 的独特 brands 的数量。 按照示例应该是:

# of unique brands  Country
        2             "ITA"
        2             "SPA"
        1             "POR"

首先,我试过:

data$var <- with(data, ave(brand, Country, FUN = function(x){length(unique(x))}))

但它不适用于因数,所以我转换了我的因数:

data$brand_t<-as.character(data$brand)
data$Country_t<-as.character(data$Country)

然后又是:

data$var <- with(data, ave(brand_t, Country_t, FUN = function(x){length(unique(x))}))

现在,如果我申请 unique(data$var),我会得到 "2", "2", "1",这是正确的,但我无法获得我想要的 table。 可能很傻,但我无法解决。

我也想知道是否有更聪明的方法来代替使用因子。

再次感谢。

这里有两个使用 data.table v >= 1.9.5dplyr

的快速方法
library(data.table)
setDT(df)[, uniqueN(brand), by = Country]

library(dplyr)
df %>%
  group_by(Country) %>%
  summarise(n = n_distinct(brand))

或以 R 为基数

aggregate(brand ~ Country, df, function(x) length(unique(x)))

tapply(df$brand, df$Country, function(x) length(unique(x)))

或者,如果您喜欢基本的 R 简单语法并且您的数据集不是太大,您可以结合

中的方法
aggregate(brand ~ Country, df, uniqueN) 

aggregate(brand ~ Country, df, n_distinct)

在 base R 中,您可以尝试将 tableuniquecolSums 结合使用,如下所示:

colSums(table(unique(mydf)))
# ITA POR SPA 
#   2   1   2