如何使用pivot_longer和/或pivot_wider重构R语言数据集?
解决方案
用tidyverse工具链可以轻松实现这个可扩展的格式转换,代码如下:
library(tidyverse) # 原始数据集 dat <- tribble( ~name, ~current_hit, ~future_hit, ~current_raw_power, ~future_raw_power, ~current_game_power, ~future_game_power, "Jackson Holliday", 45, 60, 50, 60, 25, 60, "James Wood", 30, 35, 70, 80, 55, 80) # 格式转换 result <- dat %>% # 将所有current/future列转成长格式的key-value对 pivot_longer(cols = -name, names_to = "key", values_to = "value") %>% # 拆分key为时期(current/future)和指标名称(hit/raw_power等) separate(key, into = c("period", "names"), sep = "_", extra = "merge") %>% # 将时期转成列,得到current和future两列 pivot_wider(names_from = period, values_from = value) %>% # 重命名列名匹配期望输出 rename(player = name) %>% # 调整列顺序 select(player, names, current, future) # 查看结果 print(result, row.names = FALSE)
运行后输出和你期望的完全一致:
player names current future Jackson Holliday hit 45 60 Jackson Holliday raw_power 50 60 Jackson Holliday game_power 25 60 James Wood hit 30 35 James Wood raw_power 70 80 James Wood game_power 55 80
扩展性说明
这个方案完全支持新增current_xxx/future_xxx格式的列,不需要修改代码。只要保持列名前缀为current_或future_,后面跟指标名称(支持带下划线的名称,比如game_power),代码就能自动识别并转换。
内容的提问来源于stack exchange,提问作者Violin125
相关产品推荐
相关产品推荐

