将一串数字转换为R中的数字列表

mmy*_*g77 3 r

抱歉,如果这个问题太容易了,我知道怎么用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始终是数字列表?

Ice*_*can 6

您可以在基数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)


akr*_*run 5

我们可以提取第一个列表元素并将数据转换为数字

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)