如何在R中将指定长表转换为目标宽表格式
R语言实现长表转宽表(对应SPSS的宽表转换需求)
首先还原你的原始数据:
# 构造原始长表数据 library(tibble) original_data <- tibble( in_key = c(42, 42, 43, 43, 44, 44), in_id = rep("Text", 6), ro_id = c(1, 2, 3, 4, 5, 6), data = c(1, 1, 0, 0, 0, 0) )
接下来用tidyr包的pivot_wider()函数完成转换,这是R中处理长转宽最常用的方法,完全匹配你的需求:
library(tidyr) # 转换为目标宽表 wide_data <- original_data %>% pivot_wider( id_cols = c(in_key, in_id), # 保留的分组列 names_from = ro_id, # 用于生成新列名的原始列 names_prefix = "ro_", # 给新列名添加指定前缀 values_from = data # 新列取值对应的原始列 )
运行后得到的wide_data结构如下:
| in_key | in_id | ro_1 | ro_2 | ro_3 | ro_4 | ro_5 | ro_6 |
|---|---|---|---|---|---|---|---|
| 42 | Text | 1 | 1 | NA | NA | NA | NA |
| 43 | Text | NA | NA | 0 | 0 | NA | NA |
| 44 | Text | NA | NA | NA | NA | 0 | 0 |
如果需要把未匹配项的NA替换为0(贴合你的原始数据逻辑),可以添加values_fill参数:
wide_data <- original_data %>% pivot_wider( id_cols = c(in_key, in_id), names_from = ro_id, names_prefix = "ro_", values_from = data, values_fill = 0 # 将NA填充为0 )
调整后得到的结果完全符合预期:
| in_key | in_id | ro_1 | ro_2 | ro_3 | ro_4 | ro_5 | ro_6 |
|---|---|---|---|---|---|---|---|
| 42 | Text | 1 | 1 | 0 | 0 | 0 | 0 |
| 43 | Text | 0 | 0 | 0 | 0 | 0 | 0 |
| 44 | Text | 0 | 0 | 0 | 0 | 0 | 0 |
如果你的环境未安装tidyr包,先运行install.packages("tidyr")完成安装即可。
内容的提问来源于stack exchange,提问作者user1997567
相关产品推荐
相关产品推荐

