2016-06-17 3 views
0

다섯 번째 행마다 헤더 (중요 정보 포함)가 고정 된 열 너비 파일이 있습니다. 이처럼 :3 번째 행마다 헤더가있는 고정 된 열 너비 파일을 읽는 방법

XX ZZ MM 
1 12 5 22 9 12 13 11 17 21 
2 12 6 22 10 12 14 11 18 21 
3 12 7 22 11 12 15 11 19 21 
4 12 8 22 12 12 16 11 20 21 
AA BB CC 
1 12 5 12 9 11 13 21 17 21 
2 12 6 22 10 12 14 11 18 21 
3 12 7 22 11 12 15 11 19 21 
4 12 8 22 12 12 16 11 20 21 

첫째,에서 파일을 읽을 수 있도록하고 싶습니다 나는 laf 패키지 laf_open_fwf 일부 성공을 거두었습니다.. 그러나이 함수를 사용하면 고정 된 열 너비를 설정하는 위치에 따라 헤더 정보 또는 데이터가 손실됩니다.

홀수 열 (1, 3, 5, 7 및 9)이 ID 번호이고 짝수 열이 실제 데이터가되도록 데이터가 열로 구성됩니다. 어떤 도움

XX ZZ MM 1 12 
XX ZZ MM 2 12 
XX ZZ MM 3 12 
XX ZZ MM 4 12 
XX ZZ MM 5 22 
XX ZZ MM 6 22 
XX ZZ MM 7 22 
XX ZZ MM 8 22 
XX ZZ MM 9 12 
XX ZZ MM 10 12 
XX ZZ MM 11 12 
XX ZZ MM 12 12 
XX ZZ MM 13 11 
XX ZZ MM 14 11 
XX ZZ MM 15 11 
XX ZZ MM 16 11 
XX ZZ MM 17 21 
XX ZZ MM 18 21 
XX ZZ MM 19 21 
XX ZZ MM 20 21 
XX ZZ MM 21 21 
AA BB CC 1 12 
AA BB CC 2 12 
AA BB CC 3 12 
AA BB CC 4 12 
AA BB CC 5 22 
AA BB CC 6 22 
AA BB CC 7 22 
AA BB CC 8 22 
AA BB CC 9 12 
AA BB CC 10 12 
AA BB CC 11 12 
AA BB CC 12 12 
AA BB CC 13 11 
AA BB CC 14 11 
AA BB CC 15 11 
AA BB CC 16 11 
AA BB CC 17 21 
AA BB CC 18 21 
AA BB CC 19 21 
AA BB CC 20 21 
AA BB CC 21 21 

감사 : 내가 끝낼 싶습니다 무엇

은 다음과 같다 무언가이다.

+0

다섯 번째 행마다 헤더가 있음을 의미합니까? 아니면 숫자로 시작하지 않는 모든 행이 헤더라고 가정하는 것이 가장 좋습니다. – leekaiinthesky

답변

1

파일을 읽고 줄을 반복하며 각 줄이 머리글인지 테스트 할 수 있습니다. 헤더 행이 아니라면 한 번에 두 개의 데이터 값과 함께 가장 최근에 본 헤더를 출력하십시오.

text <- readLines('/path/to/file')     # read in the file 
split_text <- strsplit(text, "\\s+")     # split each line on whitespace 

for (line in split_text) {       # iterate through lines 
    numeric_line <- suppressWarnings(as.numeric(line)) # try to convert the current line into a vector of numbers 
    if (is.na(numeric_line[[1]])) {     # if it fails, we know we're on a header line 
    header <- line 
    } else { 
    for (i in seq(1, length(line), 2)) {    # otherwise, we're on a data line, so take two numbers at once 
     print(c(header, line[[i]], line[[i+1]]))  # and output the latest header with each pair of values 
    } 
    } 
} 

이것은 특별한 출력이 지정되지 않았기 때문에 표준 출력으로 인쇄됩니다. 출력 순서는 보여준 예제와 정확히 일치하지 않는다는 점에 유의하십시오. 원하는 순서대로 출력하려면 먼저 출력을 저장 한 다음 정렬해야합니다.

+0

고마워요! 이것은 완벽하게 작동했습니다! – user2145867