【问题标题】:Collapsing duplicate rows in R by two variables [duplicate]通过两个变量折叠R中的重复行[重复]
【发布时间】:2017-03-08 09:20:43
【问题描述】:

我的数据集中有部分重复的行。这些行在两个变量上匹配,然后对于其余的变量,有一些 NA。如果我可以将这对部分重复的行组合起来,我就会为该行提供一个完整的案例。

如何根据两个变量的相似值组合数据集中的行,从而替换每个单独行中的 NA,留下一个完整的行?

a <- (c(1, 1, 1, 1))  
b <- (c(1, 1, 3, 3))  
c <- (c(NA, 0, NA, NA))  
d <- (c(0, NA, 0, NA))  

y <- data.frame(a, b, c, d)
head(y)  

a1 <- (c(1, 1))  
b1 <- (c(1, 3))  
c1 <- (c(0, NA))  
d1 <- (c(0, 0))  

z <- data.frame(a1, b1, c1, d1)
head(z)

【问题讨论】:

  • 您能否提供一些示例数据来说明您的问题(以及理想的预期输出)?
  • 这两个变量总是一样的吗?如果是这样,your_data %&gt;% group_by(match1, match2) %&gt;% summarize_all(coalesce) 应该这样做。
  • 我尝试添加一些代码。基本上,我想让 y 看起来像 z。 @SymbolixAU

标签: r dplyr


【解决方案1】:

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(y)),按'a','b'分组,循环遍历Data.table的子集(.SD),得到非NA元素

library(data.table)
setDT(y)[, lapply(.SD, function(x) x[!is.na(x)]) , .(a,b)]
#   a b  c d
#1: 1 1  0 0
#2: 1 3 NA 0

【讨论】:

  • OP已经设置了dplyr标签,所以他可能正在寻找dplyr的答案。
  • @UweBlock 是的,这可能是真的。但是,其他人也可以阅读答案。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多