如何编写for循环,以从dataframe1抓取数据并将其添加到dataframe2?

时间:2019-07-11 17:20:01

标签: r dataframe for-loop

我想实现一个for循环,在Dataframe2中创建一个新列,其中包含来自òbservation2的所有Dataframe1个匹配的纬度坐标。

observation1 <- c("ABC", "CBA", "BCA")
latitude <- c(12.4, 34.5, 22.34)
Dataframe1 <- data.frame(observation1, latitude)

observation2 <- c("BCA", "ABC", "CBA")
countries <- c("Uk", "US", "Brazil")
Dataframe2 <- data.frame(observation2, countries)

1 个答案:

答案 0 :(得分:1)

好的,所以,如果这是一项家庭作业,则可以通过for循环来完成。

首先,我们需要在第二个数据框中创建一列纬度:

Dataframe2$latitude <- NA

我们用NA填充它,以方便地查看是否出现问题。

接下来,您要遍历什么?好吧,您需要将Dataframe2中的 observations 与Dataframe1中的观察相匹配,因此自然会遍历Dataframe2的行:

for(1 in 1:nrow(Dataframe2)) {
    o <- Dataframe2$observation2[i]
    ... # something
}

好的,但是如果您有观测值o,如何从Dataframe1中找到匹配的观测值?您可以看到Dataframe1中的哪些观测值等于o,但是如果存在两个以上相同的观测值,例如Dataframe1中两次“ ABC”,该怎么办?一个更好的主意是使用match:

idx <- match(o, Dataframe1$observation1)

它返回Dataframe1中与o匹配的第一个观测值的索引。使用此索引,我们可以获得纬度:

Dataframe1$latitude[idx]

希望您可以将所有内容放在一起!

也就是说,如果您仔细观察match,您会发现for循环业务是对时间的主要浪费(而dplyr可能是一个过大的浪费),因为而不是所有这些代码行,您都可以轻松完成

Dataframe2$latitude <- Dataframe1$latitude[ match(Dataframe2$observation2, Dataframe1$observation1) ]