根据另一列提取R数据表中的唯一行

Alb*_*tB2 4 r data.table

我有一个更大的数据框,其中包含 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 年红色。

Ron*_*hah 5

该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)