【问题标题】:removing/overwriting duplicate rows of information删除/覆盖重复的信息行
【发布时间】:2015-03-29 04:09:07
【问题描述】:

您好,我有一个数据集,我会保持它非常基本,尽管实际上它要复杂得多。

 mydata= data.frame(group=c(1,1,1,2,2,3,3,3), value=c(NA, 5,3,2,NA,NA,NA,9),value2=c(6,6,9,8,8,99,99,99))

我在第一列中有不同的组。第二列是导致我出现问题的原因。偶尔在我的数据中有重复的行,从某种意义上说,通过将 value1 替换为 NA,为相同的 value2+group 组合创建了额外的行。

例如,第 1 行和第 2 行相同,但 NA/5 除外。我认为第 2 行,“value1”列中的“5”是正确的行和正确的值。

我有没有办法过滤此数据集以删除重复项,因为重复项被视为除“value1”之外的每个值都匹配的行,按“组”列分组。此外,如果这可以以 不涉及以某种方式过滤 NA 的方式完成 - 它们只是一个示例,在我的真实场景中它们可能是“XYZ”

所以想要的解决方案是删除:

第 1 行, 第 4 行, 第 5 行, 第 6 行,

结果数据集 = 第 2、3、7 行

【问题讨论】:

  • 根据数据集,删除1,5,6,7。
  • 在您的真实场景中,也许您需要将is.na(value) 替换为value!='XYZ'

标签: r duplicates filtering duplicate-removal


【解决方案1】:

根据描述

library(dplyr)
mydata %>%
        group_by(group) %>% 
       filter( !((duplicated(value2)|duplicated(value2,
                   fromLast=TRUE)) & is.na(value)))
#    group value value2
# 1     1     5      6
# 2     1     3      9
# 3     2     2      8
# 4     3     9     99

【讨论】:

  • 没有办法将原始行名保留在 dplyr 中吗?当然这对于删除重复行很有用
  • @rawr 我认为我们必须使用行名创建一个新列。
猜你喜欢
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 2016-06-21
相关资源
最近更新 更多