按另外两列中的位置将数据添加到r中的一列中

92vpleto  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个网站和日期的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循环来实现这一点,但我正在寻找一个更优雅的解决方案。也许解决方案在于不同的方法,任何帮助都非常感谢。谢谢。

rpppsulh

rpppsulh1#

library(dplyr)
dat %>%
  left_join(q1) %>%
  rows_update(q2, by = c("Site", "Date"))

left_join步骤添加了一个dailyQ变量。rows_update将更新匹配的行,而不添加新变量,有点等效于:

dat %>%
  left_join(q1) %>%
  left_join(q2, by = c("Site", "Date")) %>%
  transmute(Site, Date, dailyQ = coalesce(dailyQ.y, dailyQ.x))

相关问题