【发布时间】:2018-06-04 18:41:06
【问题描述】:
我正在寻找 R 中的解决方案来分组和组合大表中的相同行(例如 1000 x 300),忽略 NA(当找到相同的行时),用来自其他匹配的非 NA 值填充 NA 值行。最终为每个群体达成共识。在某些情况下,一行可以匹配/属于多个组,并且应该分配给所有这些组。
例如:
data <- rbind(c("A", "A", "B", "C", NA, NA),
c("A", "A", "B", "NA", NA, NA),
c("B", "B", "C", "B", NA, NA),
c(NA, NA, NA, NA, "D", NA),
c(NA, NA, "B", "C", "D", "D"),
c("B", NA, NA, NA, NA, "C"),
c(NA, NA, NA, "B", "D", "C"))
data
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] "A" "A" "B" "C" NA NA
# [2,] "A" "A" "B" "NA" NA NA
# [3,] "B" "B" "C" "B" NA NA
# [4,] NA NA NA NA "D" NA
# [5,] NA NA "B" "C" "D" "D"
# [6,] "B" NA NA NA NA "C"
# [7,] NA NA NA "B" "D" "C"
第 1、2、4、5 行和第 3、4、6、7 行应分组形成以下 2 个共识;
# (1,2,4,5) "A" "A" "B" "C" "D" "D"
# (3,4,6,7) "B" "B" "C" "B" "D" "C"
我考虑过使用 dplyr group_by,但是由于 group by 列(所有列)中有 NA 值,这很遗憾不起作用。
任何建议将不胜感激。
非常感谢!
【问题讨论】:
-
为什么第 4 行是第一组而不是第二组?哦,等等,确实如此。那么这些是不相交的“群体”吗?因此,您应该从值/位置数量最少的行开始并找到它们的所有“匹配项”,然后移至值/位置数量较多的行。我怀疑任何功能都可以做到这一点。您可能需要嵌套的 for 循环。看起来很痛苦。
标签: r