在R语言中整理数据:将长格式数据框转换为宽格式
解决方案
首先补全你原始代码中缺失的id列定义(因为你的代码未生成id,而需求是100个唯一id):
# 生成100个唯一id,重复两次对应old和new系统 id <- rep(1:100, 2) # 创建旧/新系统列并转为因子 old_new <- rep(c("old", "new"), each = 100) old_new <- as.factor(old_new) # 生成0/1随机列 random <- sample(0:1, size = 200, replace = TRUE) # 合并为数据框 data <- data.frame(id, old_new, random)
接下来使用tidyr::pivot_wider即可实现你需要的格式,核心是明确列名和值的来源:
library(tidyr) # 转换为宽格式 wide_data <- pivot_wider( data, id_cols = id, # 以id作为唯一标识列 names_from = old_new, # 将old_new的取值作为新列名 values_from = random # 将random列的值填充到对应新列中 )
转换后的wide_data包含3列:id(100个唯一值)、old(旧系统对应的0/1值)、new(新系统对应的0/1值),完全符合你的需求。
如果你之前使用pivot_wider未成功,大概率是未正确指定id_cols参数,或是数据中存在同一id对应多个相同old_new值的冲突(但你的数据构造逻辑里每个id仅对应old和new各一次,不会出现这个问题)。
内容的提问来源于stack exchange,提问作者James B
相关产品推荐
相关产品推荐

