在 R 中解析文本(例如,"[1,2,3]" )



我想把字符串转换成这样"[1,2,3]"变成r中的向量c(1,2,3)有什么建议吗?

谢谢!

我只能去掉引号和括号,但是我很难转换得到的字符"1,2,3"转换成数字向量。

选择将[]更改为()并使用eval/parse

eval(parse(text = paste0('c', chartr("[]", "()", "[1,2,3]" ))))
#[1] 1 2 3

或者软件包解决方案将使用jsonlite

library(jsonlite)
fromJSON("[1,2,3]")
[1] 1 2 3

另一种选择是首先用gsub删除[],然后用逗号将strplit分开,像这样:

string = "[1,2,3]"
gsub('\[|\]', '', string)           
#> [1] "1,2,3"
as.numeric(unlist(strsplit(gsub('\[|\]', '', string), ',')))
#> [1] 1 2 3

创建于2022-12-14与reprex v2.0.2

第一种选择是base r。它删除方括号,然后使用sep = ","扫描剩下的部分。

下一个选项捕获每个连续的数字,并使用gsubfn中的strapply对其应用as.numeric, gsubfn将每个匹配到正则表达式的匹配项输入作为第二个参数的函数,并输出函数的返回值。

以上两种方法的优点是可以很容易地修改它们以适应不同的输入格式。

第三种选择利用了这样一个事实:输入是JSON格式的,对变化并不真正灵活(尽管也许可以转换它),但对于这种特定格式来说,它是最短的。@akrun指出他已经发了最后一张

x <- "[1,2,3]"
scan(text = gsub("[][]", "", x), sep = ",", quiet = TRUE)
## [1] 1 2 3
library(gsubfn)
strapply(x, "\d+", as.numeric, simplify = c)
## [1] 1 2 3
library(jsonlite)
fromJSON(x)
## [1] 1 2 3

相关内容

最新更新