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

如何合并名称末三位相同的数值列?寻求tidyverse解决方案

解决方案

针对你这种每组末三位相同的列仅含一个有效值的场景,用tidyverse的长格式转宽格式组合操作最直接,代码逻辑清晰且易维护:

library(tidyverse)

# 假设原始数据集名为data
data.test <- data %>%
  # 把所有列转成长格式,列名存到col_name,对应值存到value
  pivot_longer(everything(), names_to = "col_name", values_to = "value") %>%
  # 提取列名最后三位,拼接成目标列名(比如Qa101→Q101)
  mutate(new_col = str_c("Q", str_sub(col_name, start = -3))) %>%
  # 过滤掉NA值,每组仅保留有有效值的那一行
  filter(!is.na(value)) %>%
  # 转回宽格式,得到合并后的列
  pivot_wider(names_from = new_col, values_from = value)

代码说明

  • pivot_longer(everything()):把宽格式数据转成长格式,方便按列名末三位分组处理
  • str_sub(col_name, start = -3):精准提取列名最后三个字符,再用str_c拼接成你要的新列名
  • filter(!is.na(value)):利用每组仅一个有效值的特点,直接滤除NA行,留下每组的有效数据
  • pivot_wider:把处理后的长格式数据转回宽格式,得到最终合并结果

替代方案(无需转长格式)

如果偏好直接在宽格式下操作,也可以用分组汇总的方式:

data.test <- data %>%
  summarise(
    across(everything(),
           .names = "{str_c('Q', str_sub(.col, start = -3))}",
           ~ .x[!is.na(.x)]
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:29