基于2个匹配列值将值从一个data.frame添加到另一个data.frame
我有两个具有相同3列的数据帧:WeekNum、Year和Number基于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,
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