为什么pivot_wider无法对值求和,仅将每个值以字符形式列出
你的代码存在两处导致结果不符合预期的问题:
- 列转换逻辑错误:
mutate(result=as.numeric(df))是尝试将整个数据框转为数值类型,而非单独处理result列,同时你原始result列中的"NA"是字符串格式,转为数值后会生成真缺失值,求和时需要忽略这类值。 - 缺少聚合规则:
pivot_wider默认不会对同一分组下的多个值自动聚合,当你指定的分组维度(Class/Test date/Score/Number_student)存在多条重复记录时,默认会把所有对应值打包为列表存放,不会自动求和。
正确的实现代码如下:
library(dplyr) library(tidyr) df %>% # 单独将result列从字符串转为数值,"NA"会转为缺失值 mutate(result = as.numeric(result)) %>% pivot_wider( names_from = Base_Score, values_from = result, # 指定聚合规则为求和,忽略缺失值 values_fn = ~ sum(.x, na.rm = TRUE), # 无匹配结果的单元格填充为0 values_fill = 0 )
运行上述代码即可得到你预期的宽表汇总结果。
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

