2012-07-20 1 views
1

나는 큰 지저분한 데이터 파일 :R -이처럼 보일 행렬 또는 데이터 프레임에 비대칭 데이터 파일을 변환

1 2 3 4 5 6 7 8 . . 
aa bb ccc d eee  ffff gg h i jj 
6  6 5 1 2 3 4 5i  734 
33 44x 1234 12 1 9 888 345  12 987765 

대부분을, 전부는 아니지만는 데이터 파일의 라인은 같은 수의 원소를 가지고있다. 그러한 데이터 파일을 읽고 매트릭스 또는 데이터 프레임으로 변환하는 가장 좋은 방법은 무엇입니까?

나는 readLines을 사용하여 파일을 읽었습니다. 또한

, 나는 다음과 같은 세 가지 라인을 사용하여 비대칭 목록 행렬로 변환 할 수 있습니다 내 이전 질문 중 하나에 대한 답변에서 알고

R: convert asymmetric list to matrix - number of elements in each sub-list differ

max.len <- max(sapply(my.data, length)) 
corrected.list <- lapply(my.data, function(x) {c(x, rep(NA, max.len - length(x)))}) 
mat <- do.call(rbind, corrected.list) 

나는 어쩌면 생각

  1. readLines
  2. 분할 각 행과 데이터 파일을 읽어 수 데이터는 별도의 요소로 설정하고
  3. 가 목록에 설정된 모든 데이터를 변환하고
  4. 매트릭스 그러나

을 만드는 상기 세 개의 선을 사용하여, I는 2 단계에 박히 요소 간의 빈 공간 수가 다양하기 때문에 각 선을 개별 요소로 분할하는 방법을 이해할 수 없습니다. 또한 제안 된 4 단계 전략이 효율적이지 않다고 생각합니다.

이 문제에 도움을 주셔서 감사합니다.

수정

죄송합니다. 원하는 결과를 게시하는 것을 잊어 버렸습니다.

1 2 3  4 5 6  7 8 . . 
aa bb ccc d eee ffff gg h i jj 
6 6 5  1 2 3  4 5i 734 NA 
33 44x 1234 12 1 9  888 345 12 987765 
+0

정확히 무슨 위의 데이터는 R에있을 때처럼 하시겠습니까? –

답변

1

당신이 2 부를 달성하기 위해 strsplit을 사용할 수는 매트릭스 또는 dataframe에 한 번 나는 이런 식으로 뭔가를 찾기 위해 데이터를 하시겠습니까?

test <- readLines(textConnection("1 2 3 4 5 6 7 8 . . 
aa bb ccc d eee  ffff gg h i jj 
6  6 5 1 2 3 4 5i  734 
33 44x 1234 12 1 9 888 345  12 987765")) 

test <- strsplit(test,"[[:space:]]+") 

max.len <- max(sapply(test, length)) 
corrected.list <- lapply(test, function(x) {c(x, rep(NA, max.len - length(x)))}) 
mat <- do.call(rbind, corrected.list) 

결과 :

> mat 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] "1" "2" "3" "4" "5" "6" "7" "8" "." "."  
[2,] "aa" "bb" "ccc" "d" "eee" "ffff" "gg" "h" "i" "jj"  
[3,] "6" "6" "5" "1" "2" "3" "4" "5i" "734" NA  
[4,] "33" "44x" "1234" "12" "1" "9" "888" "345" "12" "987765" 
관련 문제