提取两个数据帧的相等行(在R中)

提取两个数据帧的相等行(在R中),r,dataframe,R,Dataframe,我有两个数据帧: a1<-data.frame(a=c(0.5,0.4,0.4,0.2),b=c(0.4,0.3,0.5,0.2)) 及 a1是两个值的观察值的集合,因此不同的行是一组观察值。我们可以查看数据帧a2,以读取a1中观察到的组合a2第三列的结果。例如,a1中的第一行是0.5,0.4,我们在a2中看到,这给了我们结果x 现在,我想在a1中创建一个新列,其中包含a2中结果列的值,该值与我们在a1中找到的行相匹配。例如,a1.new中的第一行变为: 0.5,0.4,x 产出将是:

我有两个数据帧:

a1<-data.frame(a=c(0.5,0.4,0.4,0.2),b=c(0.4,0.3,0.5,0.2))

a1是两个值的观察值的集合,因此不同的行是一组观察值。我们可以查看数据帧a2,以读取a1中观察到的组合a2第三列的结果。例如,a1中的第一行是0.5,0.4,我们在a2中看到,这给了我们结果x

现在,我想在a1中创建一个新列,其中包含a2中结果列的值,该值与我们在a1中找到的行相匹配。例如,a1.new中的第一行变为: 0.5,0.4,x

产出将是:

a1.new<-data.frame(a=c(0.5,0.4,0.4,0.2),b=c(0.4,0.3,0.5,0.2),Result=c("x","r","t","g"))
有没有一种有效的方法可以做到这一点?

有点像这样:

newcol<-vector()
for (j in 1:nrow(a2) ) {
   thematch  <- which(a2[,1:2] == a1[j,])
   if (length(thematch)>0 ) newcol<-c(newcol,a2[thematch,3])
   }
然后,假设a1中的每一行都有一个匹配项,sa1.new有点像这样:

newcol<-vector()
for (j in 1:nrow(a2) ) {
   thematch  <- which(a2[,1:2] == a1[j,])
   if (length(thematch)>0 ) newcol<-c(newcol,a2[thematch,3])
   }

然后,假设a1中的每一行都有匹配项,sa1.new可以匹配列

a1$result <- a2$Result[match(paste0(a1$a,a1$b), paste0(a2$Check1,a2$Check2))]
然后使用[]将a2Result作为子集。这将在匹配生成的相应位置选择a2$Result的值

a2$Result[m]
#[1] "x" "r" "t" "g"

您可以匹配列

a1$result <- a2$Result[match(paste0(a1$a,a1$b), paste0(a2$Check1,a2$Check2))]
然后使用[]将a2Result作为子集。这将在匹配生成的相应位置选择a2$Result的值

a2$Result[m]
#[1] "x" "r" "t" "g"

a2或a1的相应结果?能否显示这些数据帧的预期输出?a2或a1的相应结果?能否显示这些数据帧的预期输出?哪行中是否缺少括号?添加括号并运行代码会导致以下错误:Ops.data.framea2中的错误[,1:2],a2[j,]:==仅为大小相同的数据定义frames@ErosRam是的,很抱歉打印错误-请参阅编辑。但我想我更喜欢user20650的答案。在“which”行中是否缺少括号?添加括号并运行代码会导致以下错误:Ops.data.framea2[,1:2],a2[j]中的错误:==仅为大小相同的数据定义frames@ErosRam是的,很抱歉打印错误-请参阅编辑。但我想我更喜欢user20650的答案。