R语言中重塑数据框并计算各ID编码对应的索引值之和
解决方法:计算每个ID编码对应的索引值之和
嗨,我来帮你搞定这个需求!你的full数据框是宽格式结构,我们只需要先把它转成长格式,再按ID分组求和就能得到想要的结果,下面给你两种实用的方法:
方法一:使用tidyverse工具(dplyr + tidyr)
你已经加载了dplyr,只需要再加载tidyr,就能用直观的管道操作完成整个流程:
library(tidyr) # 重塑数据并计算总和 result <- full %>% # 把所有以V开头的列转成单列(存储ID),丢弃原列名 pivot_longer(cols = starts_with("V"), names_to = NULL, values_to = "id") %>% # 过滤掉ID为缺失值的行 filter(!is.na(id)) %>% # 按ID分组 group_by(id) %>% # 计算每组的index之和(na.rm确保不会因意外缺失值报错) summarise(total_index = sum(index, na.rm = TRUE)) %>% # 取消分组(让后续操作更灵活) ungroup()
运行后result就是目标结果:每个ID对应所有出现过的index值的总和。
方法二:Base R 实现
如果不想加载额外的包,用Base R也能完成:
# 提取所有ID列并转成堆叠格式 id_stack <- stack(full[, grep("^V", names(full))]) # 合并index列和堆叠后的ID数据 id_with_index <- cbind(index = full$index, id_stack) # 过滤缺失ID,按ID分组求和 result_base <- aggregate(index ~ values, data = id_with_index[!is.na(id_with_index$values), ], sum) # 重命名列让结果更清晰 names(result_base) <- c("id", "total_index")
两种方法最终得到的结果完全一致,你可以根据自己的使用习惯选择~
内容的提问来源于stack exchange,提问作者M.S.
相关产品推荐
相关产品推荐

