将由单个数字和序列组成的字符串转换为允许对向量或数据帧进行子集化的格式

Posted

技术标签:

【中文标题】将由单个数字和序列组成的字符串转换为允许对向量或数据帧进行子集化的格式【英文标题】:convert string consisting of individual numbers and sequences to format which allows subsetting a vector or dataframe 【发布时间】:2022-01-22 05:30:34 【问题描述】:

我的问题是指将包含单个数字和序列的字符串转换为一种格式,该格式允许我对向量或数据帧进行子集化。背景:该字符串源自 .csv 中的一个单元格,该单元格作为配置文件读入,应用于自动/不手动键入数据帧的某些元素,如 my_vec[c(1,5,10:13) ,90)]。症结在于各个数字中的序列。否则 strsplit() by "," 将提供所需的结果。

subsetting_string<-"1,5,10:13,90"

我希望这个字符串/字符能够对例如从 1 到 100 的向量进行子集化

my_vec<-seq(1,100,1)

收到结果

[1] 1 5 10 11 12 13 90

重要提示:我不是在寻找以下程序,我已经知道了:

my_vec[c(1,5,10:20,90)]

但是如何转换/处理字符串(字符)以直接用作 [] 括号内的索引元素?我用 sub()、substr()、strsplit()、paste() 和 noquote() 尝试了很多次,但到现在我都失败了。

谁能帮帮我?

【问题讨论】:

【参考方案1】:

我们可以用逗号 (,) 拆分 (strsplit) 并使用 lapply/sapply 循环遍历每个元素,执行 evaluation 和 unlist 以创建向量

ind <- unlist(sapply(strsplit(subsetting_string, ",")[[1]], 
    function(x) eval(parse(text = x))), use.names = FALSE)

-输出

> ind
[1]  1  5 10 11 12 13 90

【讨论】:

谢谢你,akrun,这就是我要找的。以前从未处理过表达式和对它们的评估,但现在我明白了,在某些情况下我需要这样做。感谢您的早日回复!

以上是关于将由单个数字和序列组成的字符串转换为允许对向量或数据帧进行子集化的格式的主要内容,如果未能解决你的问题,请参考以下文章

Day019 String与其它类型之间的转换

如何将由空格缩进的用户输入存储到 String 数组中并将数字转换为 int 数组?

Java中String与数组基本数据类型等的转换

Java中String与数组基本数据类型等的转换

Java中String与数组基本数据类型等的转换

字符串编码ord,chr,字面值