如何在R中基于Context列的共享值将数据框多行转宽表?
解决方案
你可以用R的tidyverse工具集(主要是dplyr和tidyr包)来实现这个转换,步骤清晰易操作:
1. 先构造示例数据(替换成你的真实数据框即可)
# 模拟你的原始数据结构 df <- tibble( Context = c(1,1,1,2,2,2), `Question ID` = c("Q1Item1", "Q2Item1", "Q3Item1", "Q1Item2", "Q2Item2", "Q3Item2"), Rating = c("公开", "相当多", "有些", "非常", "非常", "非常") )
2. 给每个Context组内的行添加序号
我们需要给每个Context下的条目标记1、2、3...,这样后续转宽表时能对应到不同的列:
df_with_id <- df %>% group_by(Context) %>% mutate(row_num = row_number()) %>% ungroup()
3. 转换为目标宽表格式
用pivot_wider函数把长表转成你想要的结构,同时控制列名的显示格式:
final_df <- df_with_id %>% pivot_wider( id_cols = Context, names_from = row_num, values_from = c(`Question ID`, Rating), names_glue = "{.value}{row_num}" # 生成Question ID1、Rating1这类列名 )
结果验证
运行完上述代码后,final_df就是你期望的结构:
# A tibble: 2 × 7 Context `Question ID1` `Question ID2` `Question ID3` Rating1 Rating2 Rating3 <dbl> <chr> <chr> <chr> <chr> <chr> <chr> 1 1 Q1Item1 Q2Item1 Q3Item1 公开 相当多 有些 2 2 Q1Item2 Q2Item2 Q3Item2 非常 非常 非常
这个方法完全适配你的Context值到1051的大规模数据,无需手动处理每个分组。
内容的提问来源于stack exchange,提问作者PGJ
相关产品推荐
相关产品推荐

