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

时间:2015-01-06 09:46:55

标签: r 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”的单个重复值

1 个答案:

答案 0 :(得分:6)

只需将country添加到setkey,然后在duplicated(dt)

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

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

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

如果您不想键入数据集(例如,如果您想保留订单),则可以在by duplicated参数中指定要区分的列。 1}}

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

编辑:

从v1.9.8开始,所有列都在by中使用(而不是键),因此,需要显式传递by = key(dt)(如果data.table是键控的),如< / p>

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