首页 > 解决方案 > 使用 R 中的 dplyr 将数据框中的某些行替换为其他新数据框

问题描述

我有调用 mydata 的数据。mydata 包含来自阿拉巴马州销售商店的完整 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)

我该如何更换它?谢谢

标签: rdplyrtidyrplyrlubridate

解决方案


您可以连接两个数据集并使用 更新值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))

推荐阅读