【发布时间】:2017-09-29 20:11:43
【问题描述】:
【问题讨论】:
-
请不要将您的数据作为图片发布。而是在您的 R 控制台中键入
dput(table1)和dput(table2),然后通过编辑将它们的输出复制并粘贴到您的问题中。您可能还想查看这篇文章以提出可重复的问题:stackoverflow.com/questions/5963269/… -
@user 感谢您的建议!我很感激。
【问题讨论】:
dput(table1) 和 dput(table2),然后通过编辑将它们的输出复制并粘贴到您的问题中。您可能还想查看这篇文章以提出可重复的问题:stackoverflow.com/questions/5963269/…
这是dplyr的解决方案:
library(dplyr)
full_join(table1, table2,
by = c("Name", "Date", "ID")) %>%
select(-Cost, -PNL) %>%
rename(Item = ID)
结果:
Name Date Price Item
1 <NA> 2017-09-29 33 <NA>
2 <NA> 2017-08-04 2 AMA
3 Pink <NA> NA F43346
4 Green <NA> NA KF3902
注意事项:
我的解决方案对数据集table1 andtable2 做了一些假设。例如Date是否已经转换为日期变量,Name和ID变量是否是字符类型而不是因子。因此,一旦 OP 提供数据,我将调整我的解决方案。
数据:
table1 = data.frame(Name = as.character(c(NA, NA)),
Date = as.Date(c("2017-9-29", "2017-8-4")),
Price = c(33, 2),
ID = c(NA, "AMA"),
stringsAsFactors = FALSE)
table2 = data.frame(Name = c("Pink", "Green"),
Cost = c(25, 876),
PNL = c(11, 252),
Date = as.Date(c(NA, NA)),
ID = c("F43346", "KF3902"),
stringsAsFactors = FALSE)
【讨论】:
如果您想在两个数据集中按“ID”列合并,这对您有用。
merge(x = TABLE1, y = TABLE2[ , c("Name", "Date", "ID")], by = "ID", all=TRUE)
我在合并时对第二个数据集进行子设置。如果您想通过Name、Date 和ID 列合并,则可以执行以下操作:
merge(x = TABLE1, y = TABLE2[ , c("Name", "Date", "ID")], by = c("Name", "Date", "ID"), all=TRUE)
#Output
Name Date ID Price
1 Green <NA> KF3902 NA
2 Pink <NA> F43346 NA
3 <NA> 2017-08-04 AMA 2
4 <NA> 2017-09-29 <NA> 33
【讨论】:
all = TRUE
by 中列出的元素必须是有效的列名在 x 和 y" - 名称完全相同。