R语言:如何将分类数据表从Table A转换为Table B格式?
解决方案
可以用tidyverse工具包中的dplyr和tidyr函数完成这个转换,步骤如下:
1. 准备示例数据
先把模拟数据转换成R的数据框:
library(tidyverse) # 构造Table A的数据框 table_a <- tibble( CAT = c("home", "holiday", "holiday", "home"), Type = c("house", "caravan", "hotel", "bungalow") )
2. 转换为目标格式
核心是先给每个CAT分组添加行号,再将数据从长格式转成宽格式:
table_b <- table_a %>% # 按CAT分组,给每组内的行编序号 group_by(CAT) %>% mutate(row_id = row_number()) %>% ungroup() %>% # 转成宽格式,CAT的取值作为列名,Type作为对应值,按row_id对齐行 pivot_wider(names_from = CAT, values_from = Type) %>% # 调整列名首字母大写,匹配目标格式 rename(Home = home, Holiday = holiday) %>% # 移除辅助的row_id列 select(-row_id)
运行后得到的table_b就是目标格式:
# A tibble: 2 × 2 Home Holiday <chr> <chr> 1 house caravan 2 bungalow hotel
关键说明
group_by(CAT) %>% mutate(row_id = row_number()):给每个类别(home/holiday)下的条目分配行号,确保转宽格式时能正确对齐同一行的内容pivot_wider:tidyr中用于长转宽的函数,names_from指定要转成列名的列,values_from指定对应列的值rename用于调整列名大小写,让结果和Table B完全匹配
内容的提问来源于stack exchange,提问作者Louise Stevens
相关产品推荐
相关产品推荐

