[英]Filter a dataset having duplicated rows in R
我需要根据两个条件过滤数据集。
这是我的数据集的样子:
df <- data.frame(
id = c(1,2,2,3,3,4,5,5),
district = c(10,10,11,12,12,13,14,15),
value = c(10.2, 10.8, 10.8, 7.5, 9.3, 6, 7.0, 7.0))
> df
id district value
1 1 10 10.2
2 2 10 10.8
3 2 11 10.8
4 3 12 7.5
5 3 12 9.3
6 4 13 6.0
7 5 14 7.0
8 5 15 7.0
我有基于id
的重复行。 为了保留所需的行, First
id
s 具有多个区但value
相同,我需要保留第一行: Second
id
s 具有多个value
s,但来自同一区,我需要值行的max
。
所以所需的过滤数据集是:
> df
id district value
1 1 10 10.2
2 2 10 10.8
3 3 12 9.3
4 4 13 6.0
5 5 14 7.0
到目前为止,我只能找到重复的 ID。
df[duplicated(df$id),]
有没有人有任何想法? 谢谢
使用dplyr
:
df %>%
group_by(id) %>%
arrange(desc(value)) %>%
slice(1)
# # A tibble: 5 x 3
# # Groups: id [5]
# id district value
# <dbl> <dbl> <dbl>
# 1 1 10 10.2
# 2 2 10 10.8
# 3 3 12 9.3
# 4 4 13 6
# 5 5 14 7
如果有多个值,则没有真正需要区分最大值,如果有重复,则保留第一个值 - 如果我们按value
对数据进行降序排序并保留每个id
组中的第一行,则它完成了这两项任务一种逻辑。
library(dplyr)
df %>%
arrange(id, -value) %>%
distinct(id, district, .keep_all = TRUE) %>%
distinct(id, value, .keep_all = TRUE)
id district value
1 1 10 10.2
2 2 10 10.8
3 3 12 9.3
4 4 13 6.0
5 5 14 7.0
首先我们按值降序排序,然后我们使用distinct
函数寻找唯一的组合。
在base R
,我们可以在对行进行order
后使用duplicated
的
df1 <- df[order(df$id, -df$value),]
df1[!duplicated(df1$id),]
# id district value
#1 1 10 10.2
#2 2 10 10.8
#5 3 12 9.3
#6 4 13 6.0
#7 5 14 7.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.