按年份汇总exports与imports列遇NA值的R语言技术求助
按年份汇总进出口数据出现NA值问题
原始数据
| 国家 | 年份 | exports | imports |
|---|---|---|---|
| 丹麦 | 2004 | 10000000 | 10000000 |
| 丹麦 | 2008 | 20000000 | 20000000 |
| 丹麦 | 2009 | 30000000 | 30000000 |
| 挪威 | 2004 | 10000000 | 10000000 |
| 挪威 | 2008 | 20000000 | 20000000 |
| 挪威 | 2009 | 10000000 | 30000000 |
错误代码及结果
尝试执行的代码:
df_frame %>% group_by(Year) %>% summarize(total_exports = sum(exports), total_imports = sum(imports))
得到的错误结果:
| 年份 | exports | imports |
|---|---|---|
| 2004 | NA | NA |
| 2008 | NA | NA |
| 2009 | NA | NA |
期望结果
| 年份 | exports | imports |
|---|---|---|
| 2004 | 40000000 | 20000000 |
| 2008 | 40000000 | 40000000 |
| 2009 | 20000000 | 60000000 |
问题原因及解决方法
问题原因
- 列名不匹配:数据框中年份列的名称是中文
年份,但代码中使用了英文Year,导致分组逻辑失效,求和时无法定位有效数据返回NA。 - 数据类型错误:
exports和imports列可能被读取为字符类型,字符无法直接参与数值求和,同样会返回NA。
修正代码
# 先将进出口列转换为数值类型(若数据读取时为字符型) df_frame$exports <- as.numeric(df_frame$exports) df_frame$imports <- as.numeric(df_frame$imports) # 修正列名后分组汇总,添加na.rm=TRUE避免潜在NA值干扰结果 df_frame %>% group_by(年份) %>% summarize( total_exports = sum(exports, na.rm = TRUE), total_imports = sum(imports, na.rm = TRUE) )
说明
- 严格匹配分组列名
年份,确保分组逻辑正确; - 转换列类型为数值型,保证求和运算正常执行;
- 添加
na.rm=TRUE参数,排除数据中潜在NA值对求和结果的影响。
内容的提问来源于stack exchange,提问作者jaiunreve
相关产品推荐
相关产品推荐

