使用 data.table 按组显示重复项

Show duplicates by group using data.table

我正在尝试使用 data.table 按组显示重复项。更具体地说,我试图找出某个国家在给定年份是否有多个观测值。这是一个示例数据集:

# load data.table package, assuming it's installed
library(data.table)

# create dataset
year    <- rep(2010:2012, 3)
country <- c(rep("A", 3), rep("B", 3), rep("C", 3))
value   <- sample(2:200, 9, replace = TRUE)
df <- cbind(year, country, value)
df <- rbind(df, c(2012, "C", 20))
df # show data

# put data frame in data.table format and set year as key
dt <- data.table(df)
setkey(dt, year)

注意 2012 年国家 "C" 是两个观测值,而所有其他国家/地区的观测值在年份上都是唯一的。

我预计以下代码会为我提供重复的国家和年份的名称:

dt[duplicated(country), country, by = year]

相反,它显示了 2011 年以后的所有数据,这意味着重复函数应用于整个 data.table,而不是按年份。我将如何使用 data.table 在 2012 年提取国家 "C" 的单个重复值?

只需将 country 添加到您的 setkey,然后只需在 dt

中使用 duplicated(dt)
setkey(dt, year, country)
dt[duplicated(dt)]
#    year country value
# 1: 2012       C    20

或者如果您只想显示国家/地区

dt[duplicated(dt), country]
## [1] "C"

如果您不想对数据集进行键控(例如,如果您想保持顺序),您可以在 by 的参数中指定要区分的列19=]

dt[duplicated(dt, by = c("year", "country")), country]
## [1] "C"

编辑:

从 v1.9.8 开始,所有列都用于 by(而不是键),因此,需要显式传递 by = key(dt)(如果 data.table 是键) 如

dt[duplicated(dt, by = key(dt))]