首页 > 解决方案 > 根据两列删除重复项,在第三列保留一个具有较大值的列,同时保持所有列不变

问题描述

我有一个数据框如下:

x1    x2    x3    x4
X     A     B     4
Y     C     B     2
Z     A     C     1
X     C     B     5

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

x1    x2    x3    x4
X     A     B     4
Z     A     C     1
X     C     B     5

第二行被删除,因为 (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

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

标签: rdataframedplyrtidyverse

解决方案


您可以按 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

推荐阅读