计算两个组合列的唯一值

时间:2021-07-11 11:40:05

标签: r data.table

我有一个 data.table 如下

library(data.table)
library(haven)
df1 <- fread(
    "A   B   C  iso   year   
     0   B   1  NLD   2009   
     1   A   2  NLD   2009   
     0   Y   3  AUS   2011   
     1   Q   4  AUS   2011   
     0   NA  7  NLD   2008   
     1   0   1  NLD   2008   
     0   1   3  AUS   2012",
  header = TRUE
)

我想计算 isoyear 组合的唯一值(这将是 NLD 2009AUS 2011NLD 2008 和 {{ 1}},所以 4。

我尝试了 AUS 2012df1[,uniqueN(.(iso, year))]

第一个给出了错误,第二个给出了答案 2,我正在寻找 4 种独特的组合。

我在这里做错了什么?

(因为我正在使用大型字符串数据集执行此操作,所以我不希望合并列,然后进行测试)。

2 个答案:

答案 0 :(得分:2)

您可以使用 data.table 包按如下方式解决。

df1[, uniqueN(.SD), .SDcols=c("iso", "year")]

uniqueN(df1, by=c("iso", "year"))

答案 1 :(得分:2)

替代 data.table 方法,来自 countdplyr 做得非常好:

library(dplyr)
df1 %>% count(iso, year)

输出:

   iso year n
1: AUS 2011 2
2: AUS 2012 1
3: NLD 2008 2
4: NLD 2009 2