如何将disease_df关联到weather_df每组最后一行并保留空值
解决方案
可以通过分组后仅保留每周最后一行的病害数据,其余行置空来实现需求,使用dplyr包的分组和条件赋值操作即可完成:
library(dplyr) # 先执行左关联,再按周分组处理病害数据 combine_df <- weather_df %>% left_join(disease_df, by = "week") %>% group_by(week) %>% # 仅保留每组最后一行的病害强度值,其余设为NA mutate(disease_intensity = if_else(row_number() == n(), disease_intensity, NA_real_)) %>% ungroup()
代码逻辑说明
- 左关联数据:先用
left_join按week字段将两个数据集合并,此时每周的所有行都会填充对应的病害强度值; - 按周分组:通过
group_by(week)将数据按周分组,便于针对每组单独处理; - 条件赋值:使用
row_number()获取组内的行号,n()获取组内的总行数,仅当行号等于总行数(即每周最后一行)时保留病害强度值,其余行设置为NA; - 取消分组:最后用
ungroup()取消分组,恢复数据的常规结构。
执行后,combine_df中只有每周的最后一行会显示对应的disease_intensity值,其余行该字段为空白(NA),符合需求。
内容的提问来源于stack exchange,提问作者Ahsk
相关产品推荐
相关产品推荐

