단계 및 각 단계의 목적
: 1) 데이터 프레임을 split하여, 리스트로 구성된 리스트를 만들고
2) 해당 리스트의 행열을 전환한 뒤,
3) 리스트들을 데이터 프레임으로 다시 변한한 뒤,
4) 특정 문자가 포함된 행이름(row names)을 기준으로 데이터 추출
1번 목적: 데이터 프레임을 split하여, 리스트로 구성된 리스트 만들기
일단 데이터 프레임 생성
#generate first vector
sub <- rep(1:4, 3)
sub <- sort(sub)
sub
#result
[1] 1 1 1 2 2 2 3 3 3 4 4 4
#generate second vector
string <- c("A", "B", "C")
cond <- rep(string, 4)
cond
#result
[1] "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C"
##generate dataframe
df <- data.frame(sub,cond)
df
#result
sub cond
1 1 A
2 1 B
3 1 C
4 2 A
5 2 B
6 2 C
7 3 A
8 3 B
9 3 C
10 4 A
11 4 B
12 4 C
데이터 프레임을 split하여, 리스트로 구성된 리스트
group <- split(df, df$sub) #sub를 기준으로 데이터 split
#result
> group
$`1`
sub cond
1 1 A
2 1 B
3 1 C
$`2`
sub cond
4 2 A
5 2 B
6 2 C
$`3`
sub cond
7 3 A
8 3 B
9 3 C
$`4`
sub cond
10 4 A
11 4 B
12 4 C
2번 목적: 리스트로 구성된 리스트 행열 전환
grouped_cond2 <- lapply(group, function(x) {
t(x)
})
#result
> grouped_cond2
$`1`
1 2 3
sub "1" "1" "1"
cond "A" "B" "C"
$`2`
4 5 6
sub "2" "2" "2"
cond "A" "B" "C"
$`3`
7 8 9
sub "3" "3" "3"
cond "A" "B" "C"
$`4`
10 11 12
sub "4" "4" "4"
cond "A" "B" "C"
3번 목적: 리스트들 다시 데이터 프레임으로 변환
data <- do.call(rbind, grouped_cond2) #data type: matrix
data <- as.data.frame(data) #data type: dataframe
#result
> data
1 2 3
sub 1 1 1
cond A B C
sub.1 2 2 2
cond.1 A B C
sub.2 3 3 3
cond.2 A B C
sub.3 4 4 4
cond.3 A B C
4번 목적: 특정 문자가 포함된 행이름(row names)을 기준으로 데이터 추출
본 예시에서는 행이름에 'cond'가 들어가는 행만 추출
co <- paste0("cond.", 1:3)
> co #result
[1] "cond.1" "cond.2" "cond.3"
co2 <- c("cond", co)
> co2 #result
[1] "cond" "cond.1" "cond.2" "cond.3"
library(dplyr) #해당 패키지 없을 경우 install.packages("dplyr") 먼저 실행
final <- data %>%
filter(row.names(data) %in% co2)
#result
> final
1 2 3
cond A B C
cond.1 A B C
cond.2 A B C
cond.3 A B C
-끝!-
반응형