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

R语言无需逐个输入变量名拼接31个字符型变量的解决方法

报错原因

你的代码报错是因为直接传入了变量名字符串向量names2,str_c(unlist(names2))实际拼接的是30个变量名文本,返回长度为30的向量,和数据框7521行的长度不匹配,并非你需要的按行拼接对应列的实际取值。

解决方案

方法1:使用tidyr的unite()(最简便)

unite是tidyverse专门用来拼接多列生成新列的函数,直接按列位置选择即可,不需要提前提取变量名:

library(dplyr)
library(tidyr)

TVs2 <- TVs %>%
  # 参数依次为:新列名、要拼接的列范围、拼接分隔符、是否删除原列
  unite(productid, 2:31, sep = "", remove = FALSE)

如果不需要保留原来的2-31列,把remove参数改为TRUE即可。

方法2:在mutate中配合reduce拼接

如果你偏好保持mutate的写法,可以用purrr的reduce迭代拼接选中列:

library(dplyr)
library(purrr)
library(stringr)

TVs2 <- TVs %>%
  mutate(productid = reduce(across(2:31), str_c, sep = ""))

方法3:沿用你提前提取的names2变量

如果你已经提前提取了names2变量,可以用do.call把选中列传入paste0:

TVs2 <- TVs %>%
  mutate(productid = do.call(paste0, .[names2]))

这里的.指代管道传入的TVs数据框,.[names2]会提取你选中的30列传入拼接函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:09:00