R语言Dataframe重组:将重复唯一值合并为行实现长表转宽表
解决方案
方案1:使用tidyverse(推荐,代码更简洁)
# 加载依赖包,未安装的话先运行 install.packages("tidyverse") library(tidyverse) # 长表转宽表,缺失值自动填充为NA wide_df <- dat %>% pivot_wider( id_cols = Participant, # 若实际列名是小写participant请自行修改 names_from = question_id, values_from = question_answer ) # 按q1到q96的数字顺序排序列,避免字符串排序下q10排在q2前的问题 q_col_order <- stringr::str_sort(names(wide_df)[-1], numeric = TRUE) wide_df <- wide_df[, c("Participant", q_col_order)]
方案2:使用R原生函数(无需安装额外包)
# 长表转宽表 wide_df <- reshape( dat, idvar = "Participant", # 若实际列名是小写participant请自行修改 timevar = "question_id", direction = "wide" ) # 去除自动生成的列名前缀 names(wide_df) <- sub("^question_answer\\.", "", names(wide_df)) # 按q1到q96的数字顺序排序列 q_cols <- names(wide_df)[-1] q_num <- as.integer(sub("^q", "", q_cols)) wide_df <- wide_df[, c("Participant", q_cols[order(q_num)])]
如果需要将NA替换为空字符串,可在上述代码运行结束后添加:
wide_df[is.na(wide_df)] <- ""
内容的提问来源于stack exchange,提问作者Nicholas Kovacs
相关产品推荐
相关产品推荐

