R语言如何将数据框除month、type外的所有列从长格式转为宽格式
实现方案
方案1:tidyverse包pivot_wider实现(推荐,适配多列无需手动指定列名)
library(tidyverse) # 你的原数据 aa <- tibble(month = c(1, 1, 2, 2), type = c("most", "least", "most", "least"), value = c(0.2, 0.8, 1, 0.1), NP = c(4, 2, 0, 6), NO = c(1, 5, 2, 4)) # 转换代码 bb <- aa %>% pivot_wider( id_cols = month, names_from = type, values_from = !c(month, type), names_sep = "_" )
参数说明:
values_from = !c(month, type):自动选择除month、type之外的所有列作为数值列,列数再多也无需手动调整names_sep = "_":指定列名拼接符为下划线,完全符合要求的「原列名+下划线+type取值」的命名规则
方案2:R基础包reshape实现(无需安装第三方包)
bb <- reshape( aa, idvar = "month", timevar = "type", direction = "wide", sep = "_" ) # 可选:如需调整列顺序和示例完全一致,可补充以下代码 bb <- bb[, c("month", sort(colnames(bb)[-1]))]
两种方案输出结果和要求的bb结构完全一致,均支持任意数量的待转换数值列,无需额外修改配置。
内容的提问来源于stack exchange,提问作者vog
相关产品推荐
相关产品推荐

