[英]Parsing text in R (e.g., "[1,2,3]")
我想在 R 中将这样的字符串“[1,2,3]”转换为这样的向量 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 = "," 扫描剩下的内容。
下一个替代方案捕获每个连续的数字运行,并使用strapply
中的 strapply 将as.numeric
应用于它,它输入作为第二个参数给出的函数,每个匹配正则表达式并输出函数的返回值。
上面两个的优点是很容易根据输入格式的变化修改它们。
第三种选择使用了这样一个事实,即输入是 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.