R语言数据处理问题:COVID前死亡数Top5结果不符且max返回NA
问题分析与解决方案
一、为啥Top5国家和预期对不上?
你遇到的第一个问题——美国没出现在Top5里,大概率跑不出这几个原因:
- 区域名称不匹配:先看看你数据里美国对应的
region值是不是和你想的一致?比如可能数据里是"United States"而不是中文的“美国”,或者拼写是"US"/"USA",导致分组时美国确实在里面,但你没对应上名称。 - 美国的死亡数据有缺失:如果美国的
death列里有NA,max(death)会直接返回NA,排序的时候NA会被甩到最后,自然进不了Top5。你可以单独查一下美国的死亡数据情况:df %>% filter(region == "美国") %>% pull(death) %>% summary() - 分组逻辑错了:会不会你的
df里美国被拆成了州级别的子区域?这时候按region分组的话,每个州单独算max,没有汇总到国家层面,那自然看不到美国的总max值。得先确保region列是国家级别的分组。
二、为啥max(df$death)返回NA?
这个问题很直白:你的death列里有缺失值(NA)。R里的max()函数默认只要输入里有NA,就会返回NA。解决办法很简单,加个na.rm = TRUE参数忽略缺失值就行:
max(df$death, na.rm = TRUE)
你也可以先统计下death列有多少缺失值:
sum(is.na(df$death)) # 数一下缺失值的数量
给你改好的代码
结合上面的分析,调整你的代码,同时处理缺失值和分组问题:
df_test <- df %>% group_by(region) %>% summarise(death = max(death, na.rm = TRUE)) %>% # 加na.rm忽略缺失值 filter(!is.na(death)) %>% # 去掉那些死亡数据全是NA的区域 arrange(desc(death)) %>% top_n(5)
另外,建议你先看看region列的所有唯一值,确认美国的名称到底是什么:
unique(df$region)
内容的提问来源于stack exchange,提问作者u3yn5n
相关产品推荐
相关产品推荐

