基于两列删除重复项,在第三列保留具有较大值的一列,同时保持所有列完好无损

Awe*_*weq 2 r dataframe dplyr tidyverse

我有一个数据框如下:

x1    x2    x3    x4
X     A     B     4
Y     C     B     2
Z     A     C     1
X     C     B     5
Run Code Online (Sandbox Code Playgroud)

我想删除基于列 x2 和 x3 的值重复的行。x4 列中具有较大值的值将被保留。所以在这种情况下,结果将如下:

x1    x2    x3    x4
X     A     B     4
Z     A     C     1
X     C     B     5
Run Code Online (Sandbox Code Playgroud)

第二行被删除,因为对 (C, B) 出现了两次,第四行被保留,因为列 x4 上 5 > 2。

我有以下代码,似乎可以正确删除重复项,但不会将列 x1 保留在最终结果中:

result <- df%>%group_by(x2, x3)%>%summarise(x4=max(x4))

x2    x3    x4
A     B     4
A     C     1
C     B     5
Run Code Online (Sandbox Code Playgroud)

如何将所有列 x1 ... x4 保留在最终结果中?

Sot*_*tos 5

您可以按 x2 和 x3 分组并使用slice(),即

library(dplyr)

df %>% 
 group_by(x2, x3) %>% 
 slice(which.max(x4))

# A tibble: 3 x 4
# Groups:   x2, x3 [3]
  x1    x2    x3       x4
  <chr> <chr> <chr> <int>
1 X     A     B         4
2 Z     A     C         1
3 X     C     B         5
Run Code Online (Sandbox Code Playgroud)