【发布时间】:2021-09-09 20:13:12
【问题描述】:
鉴于a,我必须返回b:
a <- "[1, 2, 3]" # class: character
b <- c(1, 2, 3) # class: numeric
我尝试过strsplit() 和paste() 功能,但都不能正常工作。我能得到一些帮助吗?
【问题讨论】:
标签: r string vector character numeric
鉴于a,我必须返回b:
a <- "[1, 2, 3]" # class: character
b <- c(1, 2, 3) # class: numeric
我尝试过strsplit() 和paste() 功能,但都不能正常工作。我能得到一些帮助吗?
【问题讨论】:
标签: r string vector character numeric
我猜这是来自 JSON 源,所以有相应的包:
library(jsonlite) # obviously needs to be installed first
fromJSON(a)
#[1] 1 2 3
JSON 文件总是从字符类型读入 R 函数,但转换为 R 对象,具有类似于 read.table 的类型约定。
【讨论】:
stringr (tidyverse) 方法
library(stringr)
a <- "[1, 2, 3]"
str_split(a, ',') %>% unlist %>%
str_replace('\\D*(\\d*)\\D*', '\\1') %>%
as.numeric()
#> [1] 1 2 3
由reprex package (v2.0.0) 于 2021-06-27 创建
【讨论】:
我更喜欢使用正则表达式 find all 来提取所有数字。然后,将字符向量输出转换为数字:
a <- "[1, 2, 3]"
b <- as.numeric(regmatches(a, gregexpr("[0-9]+", a))[[1]])
b
[1] 1 2 3
【讨论】:
用gsub 清除字符串,用逗号分割并转换为数字。
b <- as.numeric(unlist(strsplit(gsub('\\[|\\]', '', a), ',\\s+')))
b
#[1] 1 2 3
【讨论】: