7

我在 R 中有这个字符串:

numbers <- "4 4956  1.00e-09         50.9     1.244 47.1 1.04  5.5     0.499   13.9       0"

我应该将数字读入向量。现在我可以找到其他语言的相同线程,但在这里找不到 R。我试过了:

library(stringr)
str_extract_all(numbers, "[0-9]+")
[[1]]
[1] "4"    "4956" "1"    "00"   "09"   "50"   "9"    "1"    "244"  "47"   "1"   
[12] "1"    "04"   "5"    "5"    "0"    "499"  "13"   "9"    "0"   

但正如您在上面看到的那样,它会弄乱数字。我认为问题出在正则表达式中,但似乎我无法正确处理,我对此一无所知。

我很感激任何评论。

4

4 回答 4

8

你可以使用scan

> y <- scan(con <- textConnection(numbers))
Read 11 items
> close(con)
> y
 [1] 4.000e+00 4.956e+03 1.000e-09 5.090e+01 1.244e+00 4.710e+01 1.040e+00
 [8] 5.500e+00 4.990e-01 1.390e+01 0.000e+00
于 2012-07-03T14:06:21.233 回答
5

如果您仍然想使用您的方式:

str_extract_all(numbers, "[\\.0-9e-]+")

并获得数字:

as.numeric(unlist(str_extract_all(numbers, "[\\.0-9e-]+")))
于 2012-07-03T14:12:10.273 回答
2
as.numeric(strsplit(numbers,split=" +")[[1]])->numbers

" +"表示一个或多个空格。)

于 2012-07-03T14:07:17.933 回答
2

有点乱,但这应该可以解决问题:as.numeric(unlist(strsplit(numbers, "\\s+")))

将行从里到外运行以查看发生了什么,strsplit拆分空格并返回一个列表,unlist使其成为字符向量,然后as.numeric转换为数字,留下一个数字向量。

于 2012-07-03T14:10:00.923 回答