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

在dplyr的mutate中使用paste()为何无法按行计算?

问题原因

vec1:vec2并非按行生成对应序列,R会将整个vec1和vec2向量作为范围参数处理(实际是基于向量元素生成一个全局序列),随后paste(..., collapse=",")会把这个全局序列合并成单一字符串。在mutate中,单个值会被自动广播到所有行,因此每行的new_col结果完全相同。

解决方案

以下几种方法都能实现逐行生成序列并合并的需求:

方法1:用rowwise()实现逐行处理

library(dplyr)

vec1 <- c(2, 5)
vec2 <- c(4, 6)
test_df <- data.frame(vec1, vec2)

test_df %>%
  rowwise() %>%
  mutate(new_col = paste(vec1:vec2, collapse = ",")) %>%
  ungroup() # 处理完记得取消逐行模式,避免后续操作效率下降

方法2:用purrr::map2_chr高效处理(适合大数据场景)

library(dplyr)
library(purrr)

test_df %>%
  mutate(new_col = map2_chr(vec1, vec2, ~paste(.x:.y, collapse = ",")))

方法3:用base R的apply实现(无需额外安装包)

test_df$new_col <- apply(test_df, 1, function(x) paste(x[1]:x[2], collapse = ","))

以上方法均能得到预期输出:

vec1 vec2 new_col
1    2    4   2,3,4
2    5    6     5,6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:20:27