R语言如何删除生成的结果表格中重复的日期记录
问题原因
你提取的dates向量存在重复值:原数据集df1中date2 = "2021-07-05"的行有2条,执行subset(df1, date2 > date1, select = date2)$date2后得到的向量里2021-07-05会重复出现2次,map_dfr会对每个元素单独运算,最终就会生成两条日期相同的结果。
解决方案
两种调整方式可选:
方案1:对提取的日期向量直接去重
只需要把获取dates的代码修改为:
dates <- unique(subset(df1, date2 > date1, select = date2)$date2)
其他代码保持不变即可,运行后每个日期仅会返回1条结果。
方案2:改用分组汇总逻辑(更符合tidyverse风格)
可以直接按date2分组完成所有运算,不需要单独提取日期再循环,代码更简洁不易出错:
library(tidyverse) library(lubridate) df1 %>% filter(date2 > date1) %>% group_by(date2) %>% summarize(across(starts_with("DR"), sum)) %>% pivot_longer(-date2, names_pattern = "DR(.+)", names_to = "Days", values_to = "Numbers") %>% mutate(Days = as.numeric(Days)) %>% nest(data = -date2) %>% mutate(mod = map(data, ~nls(Numbers ~ b1*Days^2+b2, start = list(b1 = 47, b2 = 0), data = .x)), coef = map_dbl(mod, ~coef(.x)[2])) %>% ungroup() %>% mutate(dates = format(ymd(date2), "%d/%m/%Y")) %>% select(dates, coef)
两种方案运行后得到的结果一致:
# A tibble: 5 × 2 dates coef <chr> <dbl> 1 01/07/2021 12.2 2 02/07/2021 12.4 3 03/07/2021 15.6 4 04/07/2021 13.3 5 05/07/2021 27.9
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

