R语言如何按Year列分组求和Value列并新增指定City值的汇总行
错误原因
- 你遇到的
invalid 'type' (character) of argument报错,核心是Value列当前是字符类型,sum()函数无法直接对字符数据执行求和操作,需要先转为数值类型再计算。 - 你原代码中使用
c()拼接新行的所有值,会强制把所有元素转为字符类型,也容易引发列类型不匹配的问题,建议改用list()传入新行数据,会自动匹配原有列的类型。
解决方案
方法1:修改原for循环实现
# 第一步:将Value列转为数值类型,支持求和计算 df$Value <- as.numeric(df$Value) # 遍历所有年份新增汇总行 for (year in unique(df$Year)) { # 计算当前年份所有城市的Value总和 year_total <- sum(df[df$Year == year, "Value"], na.rm = TRUE) # 新增汇总行,用list避免类型强制转换 df[nrow(df) + 1, ] <- list( Number = "0", City = "Республика Казахстан", Year = year, Info = "Среднегодовая численность населения РК (чел.)", Value = year_total, Status = "Факт" ) } # 如果你需要保持Value列和原数据一致为字符类型,最后加一行转换即可 # df$Value <- as.character(df$Value)
方法2:使用tidyverse更简洁实现(不需要手写循环)
library(dplyr) df <- df %>% # 转换Value为数值类型 mutate(Value = as.numeric(Value)) %>% # 按Year分组,每组最后新增汇总行 group_by(Year) %>% group_modify(~ bind_rows(.x, tibble( Number = "0", City = "Республика Казахстан", Info = unique(.x$Info), Value = sum(.x$Value, na.rm = TRUE), Status = "Факт" ))) %>% ungroup() # 如需转回Value为字符类型,执行以下代码 # df$Value <- as.character(df$Value)
内容的提问来源于stack exchange,提问作者Kaisar
相关产品推荐
相关产品推荐

