首页 > 解决方案 > 创建一个函数,将 dataframeX 的每一行与 dataframeY 的每一行进行比较。然后将数据框 Y 的值添加到 X

问题描述

我有两个数据框(x 和 Y)。我需要将 X 中的每一行与 Y 中的每一行进行比较,如果满足两个逻辑,则从 Y 中的列中获取值并将其放在 X 的列中(对于该特定行)。数据框 X 看起来像:

数据框

目标是针对 Y 的每一行测试 X 的每一行,如果 X$Long == Y$Longitude & X$Lat==YLattidude 对于一行,则将 Y$Site 的值分配给满足条件的行X$sink 用于正在测试的特定行。

我希望这在一个带有输入 x 和 y 的函数中。我已经尝试了一些代码,但它没有填写值。

这是我一直在做的事情的一个例子。

 **Connectivity_Matrix_function<- function(X,Y){
     X$Sink <- c("NA")
    for (z in 1:nrow(X)) {
    for (i in 1:nrow(Y)) {
    if(X[z, 4] == Y[i,2] & X[z,5] == Y[i,3]) { X[z, 11] <- Y[i, 1] }
    }
    }
    }**

标签: rdata-manipulation

解决方案


建议使用的解决方案dplyr

library(dplyr)

x %>% 
  left_join(y, by=c("Long"="Longitude", "Lat"="Latitude")) %>% 
  mutate(Sink = coalesce(Site, Sink))

推荐阅读