【发布时间】:2015-03-29 14:22:02
【问题描述】:
我正在尝试合并两个数据框,我一直在阅读不同的帖子,但我找不到获得所需输出的方法。
dfA:
Name Surname C
Ja Men T
Ale Bu T
Ge Men
dfB:
Name Surname C Ex
Ge Men T hello
Je Di T hello
期望的输出:
Merge:
Name Surname C
Ja Men T
Ale Bu T
Ge Men T
Je Di T
也就是说,用 dfB 中的可用列填充 dfA 中的列,并忽略 dfB 中不存在于 dfA 中的列。
我试过了:
merge(dfA,dfB, by=c("Name", "Surname", "Caracter"), all.x = T)
和其他组合的合并。我尝试使用 dplyr 但无法获得满意的结果。
我们将不胜感激。
提前致谢
数据:
dfA <- data.frame(
name=c("Ja", "Ale", "Ge"),
surname=c("Men", "Bu", "Men"),
C= c("T", "T", NA))
dfB <- data.frame(
name=c("Ge", "Je"),
surname=c("Men","Di"),
C= c("T","T"),
X = c("hello","hello"))
使用 dput():
# based on dput(dfA)
dfA <- structure(list(name = structure(c(3L, 1L, 2L), .Label = c("Ale",
"Ge", "Ja"), class = "factor"), surname = structure(c(2L, 1L,
2L), .Label = c("Bu", "Men"), class = "factor"), C = structure(c(1L,
1L, NA), .Label = "T", class = "factor")), .Names = c("name",
"surname", "C"), row.names = c(NA, -3L), class = "data.frame")
# based on dput(dfB)
dfB <- structure(list(name = structure(1L, .Label = "Ge", class = "factor"),
surname = structure(1L, .Label = "Men", class = "factor"),
C = "T", X = structure(1L, .Label = "hello", class = "factor")),
.Names = c("name", "surname", "C", "X"),
row.names = c(NA, -1L), class = "data.frame")
【问题讨论】:
-
请提供一个可重现的例子。
-
查看更新后的帖子。谢谢你!
-
dput 在两个数据框上更新答案
-
我将 T 更改为字符串“T”。但我只想替换值,这是一个玩具示例。再次感谢。
-
试试
full_join(dfB, dfA) %>% select(-X) %>% group_by(name, surname) %>% na.omit()