R语言聚合数据时,获取国家对应疫苗接种率最后有效值异常问题
解决分组提取非NA最后值的R代码问题
问题根源
- 第一段代码失效原因:
last(people_vaccinated_per_hundred)会直接提取分组后该列的最后一行值,若最后一行是NA,结果就会返回NA,不符合预期。 - 第二段代码的语法错误:错误地将列名
people_vaccinated_per_hundred当作函数调用(添加了(na.rm = TRUE)),R无法识别这个不存在的函数,因此运行失败。
正确解决方案
方法1:先过滤NA再取最后值
先在分组内剔除该列的NA行,再提取最后一个有效数值。如果某个分组全是NA,结果会返回NA:
aggre_data <- combined %>% group_by(location) %>% filter(!is.na(people_vaccinated_per_hundred)) %>% summarise(Last_value_vacc = last(people_vaccinated_per_hundred))
方法2:用na.omit()直接处理列
更简洁的写法,直接对列剔除NA后取最后一个值:
aggre_data <- combined %>% group_by(location) %>% summarise(Last_value_vacc = last(na.omit(people_vaccinated_per_hundred)))
关键注意点:先按时间排序!
既然是疫苗接种数据,必然是按时间维度记录的,必须先按日期排序,否则last()拿到的可能不是最新的接种率数据。假设数据包含date列,先排序再处理:
aggre_data <- combined %>% arrange(date) %>% # 按日期升序排序,确保最新数据在最后 group_by(location) %>% filter(!is.na(people_vaccinated_per_hundred)) %>% summarise(Last_value_vacc = last(people_vaccinated_per_hundred))
内容的提问来源于stack exchange,提问作者Sirkel360
相关产品推荐
相关产品推荐

