我有一个网站和日期的dataframe:
dat<-data.frame(Site = rep(c('a', 'b', 'c', 'd', 'e'),each = 5),
Date = rep(c(1,2,3,4,5),5))
我使用for循环来下载基于站点和日期的流数据。在循环的下一次迭代之前,我想将站点日期条目的流数据附加到这个 Dataframe 中。我可以这样做:
# example flow data
q1<-data.frame(Site = rep(c('a'),5),
Date = c(1,2,3,4,5),
dailyQ = c(NA, 70, 65, NA, 41))
# left join to add flow data
library(dplyr)
dat<-left_join(dat,q1,by = c("Site" = "Site", "Date" = "Date"))
然而,在下一次迭代中,该方法为dailyQ创建了一个新列:
# next loop iteration flow dataframe
q2<-data.frame(Site = rep(c('b'),5),
Date = c(1,2,3,4,5),
dailyQ = c(43, 55, NA, NA, 72))
# appending next flow data into existing dataframe
dat<-left_join(dat,q2,by = c("Site" = "Site", "Date" = "Date"))
# >names(dat)
# [1] "Site" "Date" "dailyQ.x" "dailyQ.y"
我想要的是在每次迭代时将这些新条目附加到同一列中。我查看了*_join
和stackoverflow问题的文档,但找不到解决方案。我知道我可以用嵌套的for
循环来实现这一点,但我正在寻找一个更优雅的解决方案。也许解决方案在于不同的方法,任何帮助都非常感谢。谢谢。
1条答案
按热度按时间rpppsulh1#
left_join
步骤添加了一个dailyQ
变量。rows_update
将更新匹配的行,而不添加新变量,有点等效于: