我想实现一个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)
答案 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) ]