我有一个更大的数据框,其中包含 5 年的数据。我想删除给定年份重复的行,而不删除以后年份的这些行。这是一个例子。
Year Color X Y
2014 red 1 3
2014 red 1 3
2014 blue 1 3
2015 red 1 3
2015 blue 1 3
2015 yellow 1 3
Run Code Online (Sandbox Code Playgroud)
在此示例中,我想删除 2014 年红色的重复行,而不删除 2015 年红色的行。我厌倦了以下代码:
df <- df[!duplicated(Color), by = (Year)]
Run Code Online (Sandbox Code Playgroud)
此代码删除了重复的 2014 年红色,还删除了 2015 年蓝色和 2015 年红色。
该j部分的子集:
library(data.table)
setDT(df)
df[, .SD[!duplicated(Color)], Year]
# Year Color X Y
#1: 2014 red 1 3
#2: 2014 blue 1 3
#3: 2015 red 1 3
#4: 2015 blue 1 3
#5: 2015 yellow 1 3
Run Code Online (Sandbox Code Playgroud)
另一种方法是按Year和进行分组Color并选择第一行。
df[, .SD[seq_len(.N) == 1], .(Year, Color)]
Run Code Online (Sandbox Code Playgroud)
或者最简单的方法是选择unique行并指定by:
unique(df, by = c('Year', 'Color'))
Run Code Online (Sandbox Code Playgroud)
数据
df <- structure(list(Year = c(2014L, 2014L, 2014L, 2015L, 2015L, 2015L
), Color = c("red", "red", "blue", "red", "blue", "yellow"),
X = c(1L, 1L, 1L, 1L, 1L, 1L), Y = c(3L, 3L, 3L, 3L, 3L,
3L)), class = "data.frame", row.names = c(NA, -6L))
Run Code Online (Sandbox Code Playgroud)