Как определить фрейм данных в R, который содержит результаты математической операции над двумя столбцами другого фрейма данных?
У меня есть датафрейм со следующими именами столбцов и 19 строк
> [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. Вопрос в том, как я могу создать новый фрейм данных, который содержит отношение log 2 столбцов 1 и 2, затем 3 и 4, затем 5 и 6 и так далее для всех строк в исходной ссылке?
1 ответ
Это решение не так красиво, но оно делает то, что вы хотите.
# 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)])