【问题标题】:Reading space separated numbers in R在R中读取空格分隔的数字
【发布时间】:2012-07-03 23:35:51
【问题描述】:

我在 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"   

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

感谢任何评论。

【问题讨论】:

    标签: string r numbers character


    【解决方案1】:

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

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

    并获取数字:

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

    【讨论】:

    • 是的,这正是答案!与 'scan' 和 'strplit' 选项相比,输出非常干净
    • @user1498689 - 所有四个答案的“输出”都是相同的,所以我不确定您指的是什么...尝试运行all.equal()identical() 进行确认。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      as.numeric(strsplit(numbers,split=" +")[[1]])->numbers
      

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

      【讨论】:

        【解决方案4】:

        你可以使用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-10-17
          • 1970-01-01
          • 2021-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-06
          • 2011-11-30
          • 1970-01-01
          相关资源
          最近更新 更多