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

如何从data.frame的first和last列生成目标数值数组?

问题:从data.frame的两列生成连续数值数组

我需要从data.frame的first和last两列生成包含所有连续区间的数值数组,目前通过paste0(first,':',last)生成了range列,得到了类似目标数组的字符串形式,但这个字符串无法被识别为数值数组,求解决办法。

示例数据

data <- structure(list(first = c(22, 26, 29, 32, 36, 39, 43, 47), last = c(24, 
27, 30, 34, 37, 41, 45, 49), range = c("22:24", "26:27", "29:30", 
"32:34", "36:37", "39:41", "43:45", "47:49")), row.names = c(NA, 
-8L), class = "data.frame")

当前做法与问题

我尝试用拼接字符串的方式生成表达式:

paste0('c(',paste(data$range,collapse=','),')')

得到的输出是字符串:

[1] "c(22:24,26:27,29:30,32:34,36:37,39:41,43:45,47:49)"

但这个字符串无法直接转化为数值数组,达不到预期效果。

期望输出

想要得到的是展开后的连续数值数组:

c(22:24,26:27,29:30,32:34,36:37,39:41,43:45,47:49)
# [1] 22 23 24 26 27 29 30 32 33 34 36 37 39 40 41 43 44 45 47 48 49

解决方案

方法1:用mapply直接生成区间并合并

不需要生成range列,直接对first和last列逐行生成连续序列,再合并成一个向量:

unlist(mapply(function(x, y) x:y, data$first, data$last))

方法2:用purrr包的map2(适合tidyverse风格)

如果习惯用tidyverse工具,可以用map2生成每个区间,再展平为数值向量:

library(purrr)
flatten_dbl(map2(data$first, data$last, `:`))

不推荐的方法:解析字符串(存在安全风险)

如果非要基于你生成的字符串来处理,可以用eval(parse(...)),但这种方法在处理未知数据时可能有安全隐患,不建议使用:

eval(parse(text = paste0('c(',paste(data$range,collapse=','),')')))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:20:35