2016-07-13 1 views
0

У меня есть следующий журнал, что мне нужно прочитать в Rпрочитанной строки с различной шириной и несколько заголовков в 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 = "", и после тяжелых преобразований у меня был необходимый результат.

У кого-то есть предложения по чтению с меньшей кодировкой?

ответ

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.

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