You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言技术问询:如何一次性将4个变量转换为宽表?

搞定多变量宽表转换:把两年分数合并到同一行

嘿,我来帮你解决这个数据集格式转换的问题!你想要把同一个ID下不同年份的所有Score变量都合并到同一行,不用一个个处理,一次性就能搞定,下面给你两种实用的方法:

方法一:用tidyverse(推荐,灵活易读)

首先确保你装了tidyverse包,没装的话先跑这个:

install.packages("tidyverse")
library(tidyverse)

先加载你的示例数据:

df <- data.frame(Year = c("2017","2018"), ID = c(1,1), Score = c("21","32"), Score2 = c("24","20"), Score3 = c("33", "26"), Score4 = c("25","32"))

接下来两行代码就能完成转换:先把所有Score列转成长格式,再重新转宽,把年份信息嵌到列名里:

df_wide <- df %>%
  # 把所有Score开头的列转成长表
  pivot_longer(cols = starts_with("Score"), 
               names_to = "score_type", 
               values_to = "score_value") %>%
  # 按ID分组,把年份和分数类型组合成新列名,转成宽表
  pivot_wider(names_from = c(Year, score_type), 
              values_from = score_value)

跑出来的结果就是你想要的样子:

# A tibble: 1 × 8
     ID `2017_Score` `2018_Score` `2017_Score2` `2018_Score2` `2017_Score3` `2018_Score3` `2017_Score4` `2018_Score4`
  <dbl> <chr>        <chr>        <chr>         <chr>         <chr>         <chr>         <chr>         <chr>
1     1 21           32           24            20            33            26            25            32

要是你想自定义列名格式(比如改成Score_2017而不是2017_Score),可以加一步修改列名的操作:

df_wide_custom <- df %>%
  pivot_longer(cols = starts_with("Score"),
               names_to = "score_type",
               values_to = "score_value") %>%
  mutate(new_colname = paste0(score_type, "_", Year)) %>% # 自定义列名拼接方式
  select(-Year, -score_type) %>%
  pivot_wider(names_from = new_colname, values_from = score_value)

方法二:用base R(不用额外装包)

要是你不想装tidyverse,用base R自带的reshape函数也能直接搞定:

df_wide_base <- reshape(df, 
                        idvar = "ID",  # 按ID分组
                        timevar = "Year",  # 用Year区分不同行
                        direction = "wide")  # 指定转成宽表

默认列名会用点分隔(比如Score.2017),要是想换成下划线,跑这行改列名:

colnames(df_wide_base) <- gsub("\\.", "_", colnames(df_wide_base))

这样两种方法都能一次性处理那4个Score变量,把两年的数据合并到同一行啦。

内容的提问来源于stack exchange,提问作者Jake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:21:39