R语言按城市分组生成滞后列报错:object 'temp' not found
问题解决:按分组生成滞后列并处理NA值
原始数据框
city_name Date temp hum London 2022-01-01 0 10 London 2022-01-02 7 8 London 2022-01-03 3 6 London 2022-01-04 7 7 London 2022-01-05 10 8 Paris 2022-01-01 11 3 Paris 2022-01-02 NA 2 Paris 2022-01-03 9 NA Paris 2022-01-04 10 7 Paris 2022-01-05 11 9
需求说明
- 按
city_name分组 - 为
temp和hum生成1阶、2阶滞后列(temp_lag1、temp_lag2、hum_lag1、hum_lag2) - 原字段值为NA时,对应滞后列也设为NA
报错原因
你的代码存在三个关键问题:
- 第二段代码中
group_by(city_name)后缺少管道符%>%,导致后续mutate无法识别分组后的数据集,找不到temp列 - 最后一段代码写错字段名:原字段是
hum,但误写为rltv_hum,触发对象未找到错误 - 重复调用
group_by和as.data.frame,操作冗余且可能破坏分组状态
修正后的代码
通过单管道流完成所有操作,同时用ifelse实现NA值的同步处理:
library(dplyr) df <- df %>% group_by(city_name) %>% mutate( # 处理temp的滞后列:当前temp为NA时,对应滞后列设为NA temp_lag1 = ifelse(is.na(temp), NA, lag(temp, n = 1)), temp_lag2 = ifelse(is.na(temp), NA, lag(temp, n = 2)), # 处理hum的滞后列:当前hum为NA时,对应滞后列设为NA hum_lag1 = ifelse(is.na(hum), NA, lag(hum, n = 1)), hum_lag2 = ifelse(is.na(hum), NA, lag(hum, n = 2)) ) %>% ungroup() # 可选:不需要分组状态时取消分组
最终输出
运行代码后将得到符合需求的结果:
city_name Date temp hum temp_lag1 temp_lag2 hum_lag1 hum_lag2 London 2022-01-01 0 10 NA NA NA NA London 2022-01-02 7 8 0 NA 10 NA London 2022-01-03 3 6 7 0 8 10 London 2022-01-04 7 7 3 7 6 8 London 2022-01-05 10 8 7 3 7 6 Paris 2022-01-01 11 3 NA NA NA NA Paris 2022-01-02 NA 2 11 NA 3 NA Paris 2022-01-03 9 NA NA 11 2 3 Paris 2022-01-04 10 7 9 NA NA 2 Paris 2022-01-05 11 9 10 9 7 NA
内容的提问来源于stack exchange,提问作者Dome
相关产品推荐
相关产品推荐

