使用dplyr实现跨tibble批量赋值到指定行的方法
解法
你可以用dplyr内置的rows_update()函数结合tidyr的pivot_wider()实现,全程是tidyverse语法,不需要逐元素赋值:
library(dplyr) library(tidyr) library(lubridate) # 步骤1:将长格式的my_t2转为和my_t1列对齐的宽格式,同时标注要匹配的目标日期 update_data <- my_t2 %>% pivot_wider(names_from = column, values_from = value) %>% mutate(date = ymd("2021-10-29")) # 步骤2:按date字段匹配,批量更新my_t1的对应行 my_t1 <- my_t1 %>% rows_update(update_data, by = "date")
运行后输出的my_t1就符合要求:
# A tibble: 3 × 5 date col1 col2 col3 col4 <date> <dbl> <dbl> <dbl> <dbl> 1 2021-10-30 NA NA NA NA 2 2021-10-29 10 20 30 40 3 2021-10-28 NA NA NA NA
说明
- 该方法不需要手动指定列名,即使后续my_t2的列名、列数量发生变化,代码也不需要修改就能自动适配
rows_update是dplyr专门用来批量更新指定行的函数,匹配逻辑清晰,避免base R赋值可能出现的索引错误
内容的提问来源于stack exchange,提问作者Portland
相关产品推荐
相关产品推荐

