2012-09-28 6 views
1

는 나는 다음과 같은 열 이름을 가진 dataframe 19 행다른 데이터 프레임의 두 열에 대한 수학 연산 결과를 포함하는 R 데이터 프레임을 어떻게 정의합니까?

> [1] "X12C.Signal_Grn" "X12C.Signal_Red" "X11P.Signal_Grn" 
> [4] "X11P.Signal_Red" "X7P_.A..Signal_Grn" "X7P_.A..Signal_Red" 
> [7] "X8P.Signal_Grn"  "X8P.Signal_Red"  "X9P.Signal_Grn"  
>[10] "X9P.Signal_Red"  "X10PA.Signal_Grn" "X10PA.Signal_Red" 
>[13] "X6PB.Signal_Grn" "X6PB.Signal_Red" "X12P.Signal_Grn" 
>[16] "X12P.Signal_Red" "X5P.Signal_Grn"  "X5P.Signal_Red"  
>[19] "X9P2C15.Signal_Grn" "X9P2C15.Signal_Red" "X42Pa.Signal_Grn" 
>[22] "X42Pa.Signal_Red" 

클래스는 data.frame입니다 있습니다. 문제는 원래의 참조에있는 모든 행에 대해 열 1과 2, 그 다음 3과 4, 5와 6 등의 로그 2 비율을 포함하는 새로운 데이터 프레임을 만드는 방법입니다.

+0

열 1과 2의 로그 2 비율은 얼마입니까? –

+0

안녕하세요 Patrick. 열에는 숫자 값이 첨부되어 있습니다. 로그 2 비율은 행 1, 열 2를 행 1, 열 1로 나눈 값의 기본 2에 대한 대수입니다. –

답변

3

이 솔루션은 그다지 훌륭하지 않지만 원하는대로합니다.

# Generate some random data with column names on the same format as you have 
df <- data.frame(matrix(runif(19*22), 19, 22)) 
names(df) <- sprintf("%s.Signal_%s", rep(LETTERS[1:11], each=2), 
            rep(c("Grn", "Red"), 11)) 
# Calculate log2 ratios 
l2r <- as.data.frame(lapply(1:(ncol(df)/2), function(i) log2(df[2*i]/df[2*i-1]))) 
# Give the columns comprehensive names 
names(l2r) <- sub("Signal_Red", "log2ratio", names(df)[seq(2, ncol(df), 2)]) 
+0

Ta 많이, @ 백린 –