尝试在不使用 merge() 和使用 union()、match() 或 %in% 的情况下合并两个数据框

Pat*_*at8 5 r

我想构造两个数据框并在不使用任何形式的 merge() 的情况下合并它们。相反,我需要使用集合操作 union() 和 match() 或 %in% 运算符。以下输出必须显示 d1,d2 的内容以及合并 d1 和 d2 的结果。

我已经想出了如何使用 merge() 来做到这一点,但我无法找到如何使用 union() 和 match() 或 %in% 运算符来做到这一点。或任何其他方式来做到这一点。另外我的输出与输出应该是不匹配的。我是初学者,感谢您的帮助。

d1.Kids <- c("Jack", "Jill", "Jillian", "John", "James")
d1.States <- c("CA", "MA", "DE", "HI", "PA")

d1 <- data.frame(d1.Kids, d1.States, stringsAsFactors = FALSE)

d2.Ages <- c(10, 7, 12, 30)
d2.Kids <- c("Jill", "Jillian", "Jack", "Mary")

d2 <- data.frame(d2.Ages, d2.Kids, stringsAsFactors = FALSE)

# Merging two created data frame
merge <- merge(d1, d2, by.x = "d1.Kids", by.y = "d2.Kids", all = TRUE)

print(merge)

Output should be:

  kids    ages states 
1 Jack    12   CA
2 Jill    10   MA
3 Jillian 7    DE
4 John    NA   HI
5 James   NA   PA
6 Mary    30   NA
Run Code Online (Sandbox Code Playgroud)

Rui*_*das 4

像这样的事情就可以满足问题的要求。
它看起来很长,但实际上它是每个要合并的数据帧的相同指令集。

Kids <- union(d1$d1.Kids, d2$d2.Kids)

States <- rep(NA_character_, length(Kids))
Ages <- rep(NA_real_, length(Kids))

States[match(d1$d1.Kids, Kids)] <- as.character(d1$d1.States)
Ages[match(d2$d2.Kids, Kids)] <- d2$d2.Ages

mrg <- data.frame(Kids, States, Ages)

mrg
#     Kids States Ages
#1    Jack     CA   12
#2    Jill     MA   10
#3 Jillian     DE    7
#4    John     HI   NA
#5   James     PA   NA
#6    Mary   <NA>   30
Run Code Online (Sandbox Code Playgroud)