【问题标题】:How to delete all the duplicate rows of a column based on if even just one of the duplicates has a certain value in another column如何根据即使只有一个重复项在另一列中具有特定值来删除列的所有重复行
【发布时间】:2021-06-18 14:33:15
【问题描述】:

我在 R 中有一个数据框,其中一列是 ID 号的数字因子,多次遇到相同的 ID ,一列是年龄,最后一列是由 10 个级别组成的状态。如果只有一个重复 ID 在状态列中的任何时候具有特定值,我正在尝试删除所有重复的 ID 行。

这是我的代码,如果其中任何一个具有列出的状态级别,我将尝试删除所有重复的 ID

D1 = DD %>%
    group by(ID, status)%>%
    filter(!duplicated(ID) & if(any(status = c('11','13','14','19','20'))))
    example data actual data is has over 100000 rows

这是一个示例数据集。唯一不应删除的重复项是 ID-987 id.data

【问题讨论】:

  • 您能否使用dput在您的问题中包含DD的样本

标签: r filter dplyr duplicates


【解决方案1】:

根据描述,可能是这样的

library(dplyr) 
DD %>%
     group_by(ID) %>%
     filter(!(n() > 1 & any(status %in% c('11', '13', '14', '19', '20')))) %>%
     ungroup

-输出

# A tibble: 4 x 2
#     ID status
#  <int> <chr> 
#1     3 9     
#2     4 6     
#3     4 5     
#4     5 20    

数据

DD <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 5L), status = c("9", 
"11", "10", "13", "10", "9", "6", "5", "20")), class = "data.frame",
row.names = c(NA, 
-9L))

【讨论】:

  • 工作得很好,谢谢。我已经尝试了一段时间。
【解决方案2】:

最好添加一个示例数据框。这是我提出的解决方案:

library(dplyr)
DD <- data.frame(ID = factor(sample(123490:123499, 100, replace = TRUE)),
                 status = sample(11:20, 100, replace = TRUE))


filter(DD, !duplicated(ID) & status %in% c(11, 13, 14, 19, 20))

【讨论】:

  • 感谢您的回复。
  • 例如 DD
  • 我现在有点困惑。 ID 中只有唯一因子。 ID 456 的状态为 8,不在您的列表中。顺便说一句,如果你把代码放在`中,那么它会更好看。
  • 对此我很抱歉。这是我的第一篇文章,我将来会这样做,谢谢您的反馈。
  • 别担心,我希望 cmets 有用。欢迎来到 R!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 2020-01-18
  • 2017-07-28
  • 1970-01-01
  • 2020-07-08
  • 2018-12-01
相关资源
最近更新 更多