基于2个匹配列值将值从一个data.frame添加到另一个data.frame

基于2个匹配列值将值从一个data.frame添加到另一个data.frame,r,dataframe,R,Dataframe,我有两个具有相同3列的数据帧:WeekNum、Year和Number A <- data.frame(WeekNum=c(1,2,3,4,5,1,2,3,4,5), Year=c(2000,2000,2000,2000,2000,2001,2001,2001,2001,2001), Number=c(0,0,0,0,0,0,0,0,0,0)) B <- data.frame(WeekNum=c(1,2,3,4,1,

我有两个具有相同3列的数据帧:WeekNum、Year和Number

A <- data.frame(WeekNum=c(1,2,3,4,5,1,2,3,4,5), 
                Year=c(2000,2000,2000,2000,2000,2001,2001,2001,2001,2001), 
                Number=c(0,0,0,0,0,0,0,0,0,0))

B <- data.frame(WeekNum=c(1,2,3,4,1,2,6), 
                Year=c(2000,2000,2000,2000,2001,2001,2001), 
                Number=c(0,1,0,1,2,5,6))

一种简单的方法是为data.Frame A和B创建一个id列,然后使用match:


一种简单的方法是为data.Frame A和B创建一个id列,然后使用match:


与@Arun之前的答案不同:

根据需要将数据绑定在一起:

result <- rbind(
 A[!(paste(A$WeekNum, A$Year, sep=":") %in% paste(B$WeekNum, B$Year, sep=":")),],
 B[paste(B$WeekNum, B$Year, sep=":")   %in% paste(A$WeekNum, A$Year, sep=":"),]
)
排序以获得正确的订单:

result <- result[order(result$Year,result$WeekNum),]

    WeekNum Year Number
51        1 2000      0
6         2 2000      1
7         3 2000      0
81        4 2000      1
5         5 2000      0
91        1 2001      2
101       2 2001      5
8         3 2001      0
9         4 2001      0
10        5 2001      0

与@Arun之前的答案不同:

根据需要将数据绑定在一起:

result <- rbind(
 A[!(paste(A$WeekNum, A$Year, sep=":") %in% paste(B$WeekNum, B$Year, sep=":")),],
 B[paste(B$WeekNum, B$Year, sep=":")   %in% paste(A$WeekNum, A$Year, sep=":"),]
)
排序以获得正确的订单:

result <- result[order(result$Year,result$WeekNum),]

    WeekNum Year Number
51        1 2000      0
6         2 2000      1
7         3 2000      0
81        4 2000      1
5         5 2000      0
91        1 2001      2
101       2 2001      5
8         3 2001      0
9         4 2001      0
10        5 2001      0
result <- result[order(result$Year,result$WeekNum),]

    WeekNum Year Number
51        1 2000      0
6         2 2000      1
7         3 2000      0
81        4 2000      1
5         5 2000      0
91        1 2001      2
101       2 2001      5
8         3 2001      0
9         4 2001      0
10        5 2001      0