이번에 특정 format이 존재하지 않는 데이터를 처음으로 처리해봤다.
이 과정을 정리해 본다.
DATA format
1 2 3 4 5
1 2 3
1 2 3 4 5 6 7 8 9 10
과 같이 각 row의 column 개수가 일정하지 않는 input data
1. Reading file
먼저 readLines 함수를 사용해 파일을 읽는다.
>raw_data=readLines('file')
이렇게 읽은 결과는
[1] "1 2 3 4 5"
[2] "1 2 3"
[3] "1 2 3 . . . 10"
과 같이 각 row가 list에 string 으로 저장된다.
2. String split
각 row의 string을 각각의 numeric value 로 구분한다.
> data=strsplit(da,' ')
결과는
"1 2 3 4 5" 가
"1", "2", "3","4","5" 으로 각 numeric value별로 떨어져 저장
3. Converting character to numeric value
"1","2" 와 같이 각 numeric value 가 떨어진 것 처럼 보이나,
이들은 numeric variable이 아니라, 아직까지 character variable 이다.
실제 이 숫자들을 가지고, plotting, statistic test를 수행하기 위해서는
이들을 numeric variable로 인식되도록 해야 한다.
이때, as.numeric 함수를 쓸 수 있는데, 문제는 이 함수의 입력값이
독립 variable이어야 한다는 것이다. 즉, list 형태의 데이터는 독립
variable로 변환해야 이 함수를 사용할 수 있다.
이를 위해 unlist 함수를 사용한다.
이들 함수를 한번에 쓰면,
> final=as.numeric( unlist( da ) )
이 때, da 가 multi level list 인 경우( list 여러개로 이뤄진 경우 )
위의 방법을 쓰면 서로 다른 level의 list를 구분없이 하나의 list로
합쳐 final로 합쳐 진다.
예를 들면,
[[1]]
[1] 1 2 3 4 5
[[2]]
[2] 6 7 8 9
로 구성된 da 라면, unlist(da) 의 결과는
[1] 1 2 3 4 5 6 7 8 9
가 된다. 원하는 결과는 원 list format 를 유지하는 경우가 대부분 일 것이다.
이런 경우에는 각 list level에 대해 각각 위 명령을 수행하여야 하는데,
일일이
a=as.numeric(unlist(da[1]))
b=as.numeric(unlist(da[2]))
와 같이 각각의 list 를 처리해 줄 순 없는 일이다.
이를 한번에 처리 한다면 아래와 같이 정리할 수 있다.
for(i in 1:length(da) ) {
da[[i]]=as.numeric( unlist(da[[i]] ) )
}
how to make such a code highlighting?
ReplyDeleteI defined CSS style for this code highlight in HTML manupulation menu of this blog. ( One of administration menu )
ReplyDelete