将非均匀数据读入R中

时间:2015-05-05 01:52:29

标签: r

我努力将非统一数据读入R.

我实现了以下目标:

  • 使用" readLines"阅读
  • 中的文本文件数据
  • 使用" grep"找到我想要的数据块
  • 使用grep中的索引创建一个仅包含该数据块的变量(名为" block")

到目前为止一切都很好 - 我现在有了我想要的数据。但是 - 它只是一个包含所有数据的列的字符变量。

这会创建一个我所做的变量的样本,叫做" block" (前3行):

line1 = c("    114.24    -0.39     0.06    13.85     -0.06     1402.11      -1.48     0.0003     0.0000      35.468      1.02    -0.02     0.00   0   1   1   1     0    49.87   4      -290         0         0     -0.002     -0.010      0.155    999.00   11482.66    999.00   11482.66  16:52:24:119          255     13.89     50.00     0.00    -5.49    0.00")
line2 = c("    114.28    -0.39     0.08    13.84     -0.06     1402.57      -1.48     0.0004     0.0000      35.479      1.29    -0.02     0.00   0   1   1   1     0    49.82   4      -272         0         0     -0.002     -0.011      0.124    999.00   11482.66    999.00   11482.66  16:52:24:150          255     13.89     50.00     0.00    -5.49    0.00")
line3 = c("    114.31    -0.39     0.09    13.83     -0.06     1403.03      -1.47     0.0005     0.0000      35.492      1.42    -0.02     0.00   0   1   1   1     0    49.78   4      -263         0         0     -0.002     -0.011      0.046    999.00   11482.66    999.00   11482.66  16:52:24:197          255     13.89     50.00     0.00    -5.49    0.00")

block = c(line1,line2,line3)

我的目标是将这些数据作为data.frame,每个数据点都有单独的列。

我尝试使用strsplit避风港有帮助(解决方案是否涉及strsplit?) - 这里最好的方法是什么?欢迎任何建议/反馈。

strsplit(块," \ S"固定= F)

2 个答案:

答案 0 :(得分:2)

以下任何一项都适合您:

## Creates a "data.table"
library(splitstackshape)
cSplit(data.table(x = block), "x", " ")

## Creates a "data.frame"
read.table(text = block, header = FALSE)

## Creates a character matrix
do.call(rbind, strsplit(block, "\\s+"))

## Like the above, but likely to be faster
library(stringi)
stri_split_regex(block, "\\s+", simplify = TRUE)

请注意最后两个选项的"\\s+"。 " +"是匹配多个空格。

答案 1 :(得分:0)

实际上 - 这看起来可能有效。

Import raw data into R

但是想检查这是否是解决这种情况的最佳方法......?