抱歉,如果这个问题太容易了,我知道怎么用Python做,但我现在需要它在R中.
作为SQL查询的一部分,我得到一个带有一些数字的变量(长度可以变化),作为一个字符串,如下所示:
x <- "{0.5,0.25,0.75,0.5}"
Run Code Online (Sandbox Code Playgroud)
我可以摆脱括号和逗号,因此:
library(stringr)
library(dplyr)
y <- x %>%
str_remove_all("[{]") %>%
str_remove_all("[}]") %>%
strsplit(",")
Run Code Online (Sandbox Code Playgroud)
...但我收到的输出仍然是一个字符串列表:
> y
[[1]]
[1] "0.5" "0.25" "0.75" "0.5"
Run Code Online (Sandbox Code Playgroud)
如何确保y始终是数字列表?
您可以在基数R中执行此操作
as.numeric(strsplit(substr(x, 2, nchar(x) - 1), ',')[[1]])
Run Code Online (Sandbox Code Playgroud)
要么
as.numeric(strsplit(gsub('[{]|[}]', '', x), ',')[[1]])
Run Code Online (Sandbox Code Playgroud)
我们可以提取第一个列表元素并将数据转换为数字
library(stringr)
as.numeric(str_extract_all(x, "[0-9.]+")[[1]])
#[1] 0.50 0.25 0.75 0.50
Run Code Online (Sandbox Code Playgroud)
或者base R使用regmatches/regexpr
as.numeric(regmatches(x, gregexpr("[0-9.]+", x))[[1]])
#[1] 0.50 0.25 0.75 0.50
Run Code Online (Sandbox Code Playgroud)
或scan删除大括号后
scan(text= gsub("[{}]", "", x), what = numeric(), sep="," , quiet = TRUE)
Run Code Online (Sandbox Code Playgroud)