在R语言中将宽数据集转换为长数据集的实现问题
解决方案
你需要调整数据转换逻辑,先拆分列名得到指标类型与fID,再将指标转为宽格式列。以下是修正后的实现:
可复现数据集
set.seed(123) dataset <- data.frame(ID = 1:10, height_1 = rnorm(10,0,1), height_2 = rnorm(10,0,1), common_fam = rnorm(10,0,1), weight_1 = rnorm(10,0,1), weight_2 = rnorm(10,0,1), common2_fam2 = rnorm(10,0,1))
修正后的数据转换代码
library(tidyr) library(dplyr) data3 <- dataset %>% # 拆分列名,同时提取指标类型(measure)和fID pivot_longer(-c(ID, ends_with("fam"), ends_with("fam2")), names_to = c("measure", "fID"), values_to = "value", names_sep = "_") %>% # 将指标类型转为独立的宽格式列(height、weight) pivot_wider(names_from = measure, values_from = value)
转换后的数据结构
最终data3包含你需要的所有列:
ID:原数据的ID列common_fam、common2_fam2:原数据保留的公共列fID:取值为1或2,对应原列名的后缀标识height、weight:分别对应原数据中同指标不同fID的数值
内容的提问来源于stack exchange,提问作者Tube
相关产品推荐
相关产品推荐

