【发布时间】:2019-03-20 16:48:44
【问题描述】:
我有许多数据集,我想将它们合并并使其独一无二。我想在这里做一个有代表性的数据
df1 <- read.table(text="info var1 var2
1 C001 mytest1 NA
2 C002 mytest2 NA
3 C003 myse1 data1
4 C004 NA NA
5 C007 where1 India
6 C010 ohio city
11 C016 number fifty
12 C017 city rome", header=T, stringsAsFactors=F)
and this
df2 <- read.table(text="info var1 var2
1 C003 myse1 data1
2 C007 where1 India
3 C010 ohio city
4 C016 number fifty
5 C017 city rome
6 C022 country India
7 C023 number 10", header=T, stringsAsFactors=F)
df3 <- read.table(text="info var1 var2 var3
1 C017 city rome ind
2 C022 country India bes
3 C027 this there NA", header=T, stringsAsFactors=F)
我想根据信息将它们组合在一起,但要使其独一无二。 当我想合并所有文件时,我会这样做
library(tidyverse)
library(dplyr)
list(df1, df2, df3) %>% reduce(full_join, by = "info")
但我希望输出是这样的
info var1.x var2.x var3
C001 mytest1 NA NA
C002 mytest2 NA NA
C003 myse1 data1 NA
C004 NA NA NA
C007 where1 India NA
C010 ohio city NA
C016 number fifty NA
C017 city rome ind
C022 country India bes
C023 number 10 NA
C027 this there NA
【问题讨论】:
-
bind_rows(df3, df2, df1) %>% distinct(info, .keep_all = TRUE)? -
@Frank 您的解决方案有效。我很好奇它是否会始终保留信息最多的行(例如称为 CO17 的行),或者您是否必须像我的解决方案中那样明确地这样做。
-
是的,它只是根据 bind_rows (df3 > df2 > df1) 的参数顺序保留行。如果规则更复杂,可能需要其他东西,也许是
coalesce函数(我不太了解)。或者,在绑定之后,也许您可以计算缺失值、排序,然后使用distinct。 -
@Frank 好的,谢谢。我会在这种情况下发布我的解决方案,因为它更通用。不过没那么漂亮。
-
@hmhensen 啊,以为你是 OP,之前没有注意到你的答案。是的,这是更可靠的方法。
标签: r