1

假设 a 有一个由字符串组成的向量,就像这样:

> string
[1] "   26     10.00       28.00      28.00      28.00     28.00      28.00    28.00      26"
[2] "   27     10.00       28.00      28.00      28.00     28.00      28.00    28.00      27"
[3] "   28     10.00       28.00      28.00      28.00     28.00      28.00    28.00      28"
[4] "   29     10.00                  28.00      28.00     28.00      28.00    28.00      29"
[5] "   30     10.00                  28.00      28.00     28.00      28.00    28.00      30"
[6] "   31     10.00                  28.00                28.00               28.00      31"

我想把它读成data.frame6 行 9 列,像这样:

  V1 V2 V3 V4 V5 V6 V7 V8 V9
1 26 10 28 28 28 28 28 28 26
2 27 10 28 28 28 28 28 28 27
3 28 10 28 28 28 28 28 28 28
4 29 10 NA 28 28 28 28 28 29
5 30 10 NA 28 28 28 28 28 30
6 31 10 NA 28 NA 28 NA 28 31

其中每个空单元格被视为NA. 我试过 useread.table和 setting fill=TRUE,但它不起作用,因为结果是这样的:

> read.table(textConnection(string), sep="", fill=TRUE)
     V1 V2 V3 V4 V5 V6 V7 V8 V9
    1 26 10 28 28 28 28 28 28 26
    2 27 10 28 28 28 28 28 28 27
    3 28 10 28 28 28 28 28 28 28
    4 29 10 28 28 28 28 28 29 NA
    5 30 10 28 28 28 28 28 30 NA
    6 31 10 28 28 28 31 NA NA NA

我坚持这一点。也许这比我想象的要容易,但我不知道该怎么做:(

这是数据:

string <- c("   26     10.00       28.00      28.00      28.00     28.00      28.00    28.00      26",
                "   27     10.00       28.00      28.00      28.00     28.00      28.00    28.00      27", 
                "   28     10.00       28.00      28.00      28.00     28.00      28.00    28.00      28", 
                "   29     10.00                  28.00      28.00     28.00      28.00    28.00      29", 
                "   30     10.00                  28.00      28.00     28.00      28.00    28.00      30", 
                "   31     10.00                  28.00                28.00               28.00      31")
4

1 回答 1

4

看起来你可以使用read.fwf()

ff <- tempfile()
cat(file = ff, "12 34 56", "98    54", sep = "\n")
read.fwf(ff, widths=c(3,3,2))
#   V1 V2 V3
# 1 12 34 56
# 2 98 NA 54
于 2013-10-15T21:27:59.583 回答