繁体   English   中英

解析 R 中的文本(例如,“[1,2,3]”)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM