簡體   English   中英

在 R 中過濾具有重復行的數據集

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM