我有以下data.frames:
d1 <- data.frame(A=c(-1,-1,1,1,-1,-1,1,1), B=c(-1,1,-1,1,-1,1,1,-1), Y=c(2,3,4,5,8,9,10,11))
d2 <- data.frame(A=c(1,1,-1,-1,1,-1,1,-1), B=c(-1,1,1,-1,-1,1,1,-1))
我想将列Y添加到d2 data.frame中。我尝试过使用merge
函数,但后来我复制了data.frame的行数。
我还尝试使用函数order
和match
按第二个列的列排序第一个data.frame:
d1[order(match(
paste(d1$A,d1$B),
paste(d2df$A,d2df$B))
),]
但它没有用,我也不知道为什么。
答案 0 :(得分:3)
如果我理解正确,这将为您提供以下结果:
# Sort d1 and d2 with columns A and B
d1 <- d1[order(d1$A,d1$B),]
d2 <- d2[order(d2$A,d2$B),]
# Copy Y from d1 to d2
d2$Y <- d1$Y
# Restore original order in d1 and d2
d1 <- d1[order(rownames(d1)),]
d2 <- d2[order(rownames(d2)),]
d2$Y
#[1] 4 5 3 2 11 9 10 8
答案 1 :(得分:0)
如果d1
和d2
行数不同:
chosen <- numeric(length = nrow(d1))
choices <- paste(d1$A, d1$B)
for(i in seq(nrow(d1))){
chosen[i] <- match(paste(d2$A[i], d2$B[i]), choices)
choices[chosen] <- 0
}
d2$Y <- d1[chosen, "Y"]
d2$Y
#[1] 4 5 3 2 11 9 10 8