r - 根据两列删除重复项,在第三列保留一个具有较大值的列,同时保持所有列不变
问题描述
我有一个数据框如下:
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 保留在最终结果中?
解决方案
您可以按 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
推荐阅读
- multithreading - 为什么计算着色器线程在移动设备上随机失败,而不是在 PC 上?
- swift - 尝试显示数据库中的图片时出现致命错误
- amcharts4 - 无法使用导出 API 使用 Amcharts4 导出 png
- apache-spark - 如何根据列值选择列?
- android - 如何在android中获取屏幕时间报告
- java - 在 RecyclerView 的后台 onDraw
- flutter - 动态表单删除方法总是删除最后添加的
- javascript - 如何使用 JavaScript / Tone.js 更改音高和播放速率?
- sql - 存在 3 分钟后从 db 中删除一行。SQL
- android - 为什么 Recycler View 提供比 List View 更好的体验?