r - 根据规则删除多列和多行中的重复项
问题描述
假设我有以下数据:
dt <- data.frame(id=c(1,1,2,2,3,3,3,4,5,5,5,5,6,7,7),
rk=c("a","a","b","b","c","y","c","d","e","y","e","e","f","g","h"),
.id=c("df1", "df9", "df5", "df16", "df2", "df11", "df11", "df4", "df9", "df4", "df6", "df3", "df16", "df2", "df9"))
所以我的数据看起来像这样:
id rk .id
1 a df1
1 a df9
2 b df5
2 b df16
3 c df2
3 y df11
3 c df11
4 d df4
5 e df9
5 y df4
5 e df6
5 e df3
6 f df16
7 g df2
7 h df9
但我只想要每对id和rk一行。因此,在示例中,id=5 可以有两行:一行 rk=e,另一行 rk=y。
为了找到要保留的正确行,我查看了.id列。在这里,我按以下顺序排列优先级:
df2、df9、df1、df5、df4、df6、df15、df17、df16、df14、df8、df11、df3、df7、df12、df13、df10
所以我总是在 .id=df9 的一行上保留 .id=df2 的一行。同样,我将始终保留 .id=df15 的行而不是 .id=df14 的行。
请注意,顺序不是按时间顺序排列的。
回到我的示例数据,这就是我想要得到的结果:
id rk .id
1 a df9
2 b df5
3 c df2
3 y df11
4 d df4
5 e df9
5 y df4
6 f df16
7 g df2
7 h df9
我的数据集很大,所以我希望你们中的一些人可以帮助我编写一些代码,使这变得容易。
解决方案
With dplyr
we can group_by
id
and rk
get the first match
of .id
with new_order
。
library(dplyr)
dt %>%
group_by(id, rk) %>%
summarise(.id = .id[which.min(match(.id, new_order))])
# id rk .id
# <dbl> <fct> <fct>
# 1 1.00 a df9
# 2 2.00 b df5
# 3 3.00 c df2
# 4 3.00 y df11
# 5 4.00 d df4
# 6 5.00 e df9
# 7 5.00 y df4
# 8 6.00 f df16
# 9 7.00 g df2
#10 7.00 h df9
等效的,基本 Raggregate
选项是
aggregate(.id~id+rk, dt, function(x) x[which.min(match(x, new_order))])
如果还有其他一些我们想要保留的列,我们可以使用filter
而不是summarise
dt %>%
group_by(id, rk) %>%
filter(.id == .id[which.min(match(.id, new_order))])
其等效ave
选项是
dt[with(dt, .id == ave(.id, id, rk, FUN = function(x)
x[which.min(match(x, new_order))])), ]
在哪里 ,
new_order <- c("df2", "df9", "df1", "df5", "df4", "df6", "df15", "df17", "df16",
"df14", "df6", "df8", "df11", "df3", "df7", "df12", "df13", "df10")
推荐阅读
- javascript - 选择行时自动选中复选框
- google-apps-script - Google Script – 表单提交行为更改
- r - group_by() 和 summarise() 错误
- android-studio - 安装区发现一些冲突 - Android Studio - cacerts错误
- timeout - 为什么 AWS lambda 函数在 VPC 中有时会超时,有时工作正常?
- android - 如何使用这个 xml drawable 作为进度条
- scala - Maven 基于 Jenkins 构建
- xpath - importXML 中的 xpath://comment() 与 //*/comment()
- r - 使用 R 处理数据时在 xlsm 文件中保留宏
- php - 在 Wordpress 中使用自定义库简码