[英]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.