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

在R中实现含NA值的多变量宽表转长表求助

解决方案:使用pivot_longer转换宽格式为长格式

你可以用tidyr包中的pivot_longer函数,通过正则表达式匹配变量名的规律,批量合并多组id和score变量,同时保留NA值。具体代码如下:

# 加载tidyr包
library(tidyr)

# 转换格式
want <- have %>%
  pivot_longer(
    cols = -primary_id,  # 排除主键列,转换其余所有列
    names_pattern = "(id|score)(\\d+)",  # 拆分变量名为前缀(id/score)和数字后缀
    names_to = c(".value", "group"),  # .value用于合并同前缀的列,group暂存数字后缀
    values_drop_na = FALSE  # 保留NA值,默认即为FALSE,可省略
  ) %>%
  select(primary_id, ids = id, scores = score)  # 重命名列并移除临时的group列

代码说明:

  • names_pattern = "(id|score)(\\d+)":正则表达式精准匹配id1/score1、id2/score2这类变量名,将其拆分为「前缀(id或score)」和「数字后缀」两部分。
  • names_to = c(".value", "group"):.value会把所有前缀相同的列合并成一列(比如所有id开头的列合并为id列,score开头的列合并为score列),group用来确保每组idN和scoreN对应匹配。
  • 最后通过select调整列名和顺序,得到你需要的格式。

运行上述代码后,即可得到包含所有NA值的长格式数据集,且完全适配你实际的20组id/score变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:35