在R

时间:2016-07-13 19:56:06

标签: r transformation

我有以下需要在R

中阅读的日志
MO                RSITE                               COMB  FHOP  MODEL
RXOTG-0           3BFR42                              HYB   SY    G12

                  SWVERREPL      SWVERDLD       SWVERACT      TMODE
                                 B1312R078G     B1312R078G    SCM

MO                RSITE                               COMB  FHOP  MODEL
RXOTG-1           3BFR42                              HYB   SY    G12

                  SWVERREPL      SWVERDLD       SWVERACT      TMODE
                                 B1312R078G     B1312R078G    SCM

我需要像那样阅读

MO      RSITE   COMB    FHOP    MODEL   SWVERREPL   SWVERDLD    SWVERACT    TMODE
RXOTG-0 3BFR42  HYB     SY      G12                 B1312R078G  B1312R078G  SCM
RXOTG-1 3BFR42  HYB     SY      G12                 B1312R078G  B1312R078G  SCM

我不能使用read.fwf,因为每行都有不同的宽度,每行都有一个标题。我能阅读的唯一方法是使用read.table sep =“”,经过大量的转换,我得到了想要的输出。

有人建议用较少的编码阅读吗?

2 个答案:

答案 0 :(得分:0)

您可以使用readLines然后提取线条,将它们粘贴在一起并使用text中的read.table参数来导入数据。

f <- readLines("myFile.txt")
header  <- paste(f[1], f[3])
body <- sapply(seq(1, length(f), 6), function(i) paste(f[i+1], f[i+4]))

read.table(header = FALSE, text = paste(body, collapse = "\n"))

这省略了空白栏。如果您需要此列,或者不同的列为空,请改用read.fwf

答案 1 :(得分:0)

这将读取您的示例,但如果任何条目具有未加引号的嵌入空格,则会失败:

data.frame( scan(text=txt, 
                 what=list( MO="", RSITE="", COMB="",  FHOP="", 
                            MODEL="", SWVERREPL="",   SWVERDLD="", 
                            SWVERACT ="",   TMODE=""), 
                 multi.line=TRUE))[c(TRUE, FALSE), ] # removes extraneous extra "headers"
#--------------
Read 4 records
  MO RSITE COMB FHOP MODEL SWVERREPL SWVERDLD SWVERACT TMODE
1 MO RSITE COMB FHOP MODEL   RXOTG-0   3BFR42      HYB    SY
3 MO RSITE COMB FHOP MODEL   RXOTG-1   3BFR42      HYB    SY