如何使用merge和所需输出合并R中的两个数据帧?

如何使用merge和所需输出合并R中的两个数据帧?,r,merge,R,Merge,我有两个数据帧: d1.Kids <- c("Jack", "Jill", "Jillian", "John", "James") d1.States <- c("CA", "MA", "DE", "HI", "PA") d1 <- data.frame(d1.Kids, d1.States) d1 d1.Kids d1.States 1 Jack CA 2 Jill MA 3 Jillian

我有两个数据帧:

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

d1 <- data.frame(d1.Kids, d1.States)

d1

   d1.Kids d1.States
1    Jack        CA
2    Jill        MA
3 Jillian        DE
4    John        HI
5   James        PA

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

d2 <- data.frame(d2.Kids, d2.Ages)
d2
   d2.Kids d2.Ages
1    Jill      10
2 Jillian       7
3    Jack      12
4    Mary      30
结果是:

 d1.Kids d1.States d2.Kids d2.Ages
1     Jack        CA    Jill      10
2     Jill        MA    Jill      10
3  Jillian        DE    Jill      10
4     John        HI    Jill      10
5    James        PA    Jill      10
6     Jack        CA Jillian       7
7     Jill        MA Jillian       7
8  Jillian        DE Jillian       7
9     John        HI Jillian       7
10   James        PA Jillian       7
11    Jack        CA    Jack      12
12    Jill        MA    Jack      12
13 Jillian        DE    Jack      12
14    John        HI    Jack      12
15   James        PA    Jack      12
16    Jack        CA    Mary      30
17    Jill        MA    Mary      30
18 Jillian        DE    Mary      30
19    John        HI    Mary      30
20   James        PA    Mary      30
我想得到这个结果:

   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
若不使用by,它将进行交叉连接,我们可以使用by选项避免这种情况。由于两列中的列名不同,请使用by.x和by.y并使用all=TRUE进行完全联接

并通过删除前缀部分更改“out”的名称

names(out) <- sub("^[^.]+\\.", "", names(out))

使用by选项在我标记的dupe link中,问题是关于data.table的,但答案中使用的语法是sameI希望使用union合并这两个数据帧,而不使用合并函数,“%运算符中的匹配或%。@CoskunOlcucu但您的代码使用的是“合并”,问题的标题是如何使用“合并到所需输出”来合并R中的两个数据帧?”?
out <- merge(d1,d2, by.x = 'd1.Kids', by.y = 'd2.Kids', all = TRUE)
names(out) <- sub("^[^.]+\\.", "", names(out))