使用 R 中的 dplyr 将数据框中的某些行替换为其他新数据框

Replace some rows in data frame with other new data frame using dplyr in R

我有调用 mydata 的数据。 mydata 包含来自 Sales Alabama Store 的完整 9 月数据。这是:

# My Data
library(lubridate)
gen_seq <- seq(ymd_h("2021-09-01-00"), ymd_h("2021-09-30-23"), by = "hours")
datex <- date(gen_seq)
hourx <- hour(gen_seq)
store <- "Alabama"
sales <- round(runif(length(datex), 10, 50), 0)
mydata <- data.frame(datex, hourx, store, sales)

现在我有一个从日期“2021-09-15”和“2021-09-16”开始的新修订版,它是修订版:

# New My Data
library(lubridate)
gen_seq <- seq(ymd_h("2021-09-15-00"), ymd_h("2021-09-16-23"), by = "hours")
datex <- date(gen_seq)
hourx <- hour(gen_seq)
store <- "Alabama"
sales <- round(runif(length(datex), 10, 50), 0)
newmydata <- data.frame(datex, hourx, store, sales)

如何更换?谢谢

您可以连接两个数据集并使用 coalesce 更新值。

library(dplyr)

left_join(mydata, newmydata,  by = c("datex", "hourx", "store")) %>%
  mutate(sales = coalesce(sales.y, sales.x)) %>%
  select(-sales.x, -sales.y)

在基础 R 中,

merge(mydata, newmydata, by= c("datex", "hourx", "store"), all.x = TRUE) |>
  transform(sales = ifelse(is.na(sales.y), sales.x, sales.y))