使用多个重叠变量将变量与其他数据集匹配

时间:2014-08-01 15:05:22

标签: r merge dataframe

我有两个数据集,其中包含一些重叠变量。一个数据集基本上是另一个的子集,但需要根据一些重叠变量添加一个额外的变量。例如

varA <- c(rep(c("a","b"), each=5))
blah <- c(11:20)
varB <- c(1:10)
speed <- rnorm(10)
dataset1 <- data.frame(varA,blah,varB,speed)


varA.2 <- c("a","a","b","b")
varB.2 <- c(2,10,11,7)
speed.2 <- rep(NA, 4)
dataset2 <- data.frame(varA.2, varB.2, speed.2)
dataset2

我希望“speed.2”变量包含varA和varB在两个集合之间匹配的行的速度值。

我尝试了“合并”,但遇到了问题。

谢谢!

2 个答案:

答案 0 :(得分:3)

可能是:

colnames(dataset2) <- gsub("\\..*","", colnames(dataset2))
library(dplyr)
left_join(dataset2[,-3],dataset1[,-2])
#    Joining by: c("varA", "varB")
#   varA varB      speed
#1    a    2 -1.3243815
#2    a   10         NA
#3    b   11         NA
#4    b    7 -0.6026936

或者不更改列名。

 merge(dataset1[,-2],dataset2[,-3], by.x=c("varA","varB"), by.y=c("varA.2", "varB.2"), all.y=TRUE)
 #  varA varB      speed
# 1    a    2 -0.6797753
# 2    a   10         NA
# 3    b    7 -2.1838454
# 4    b   11         NA

速度值因示例不使用set.seed()

而有所不同

答案 1 :(得分:0)

您可以使用&#39;匹配&#39;函数为&#34;其中varA和varB匹配&#34;

dataset2$speed.2 = dataset1[match(paste(dataset2$varA.2,dataset2$varB.2),
                               paste(dataset1$varA, dataset1$varB)),]$speed
dataset2
  varA.2 varB.2   speed.2
1      a      2 0.3917783
2      a     10        NA
3      b     11        NA
4      b      7 1.3265439
>