Я новичок в циклах и функциях в R.
Цель : у меня есть фрейм данных, который я хотел разделить на несколько фреймов данных на основе определенного набора идентификаторов.Затем я хочу суммировать каждый разделенный фрейм данных и хотел бы использовать цикл для этого.
Первое, что я сделал, я разделил фрейм данных на основе Tissue и Genes.Например:
Sb_qPCR <- split(Sb_qPCR, list(Sb_qPCR$Tissue, Sb_qPCR$Gene))
Это было успешно.Я получил список, в котором мой исходный фрейм данных был разбит на более мелкие фреймы данных в соответствии с уникальными генами и тканями.
Далее я хотел бы суммировать каждый отдельный кадр данных (эти разделенные кадры данных еще называют кадрами данных?) И сохранить итоговый вывод.Я успешно суммировал каждый отдельный фрейм данных с помощью функции summarySE, которую я нашел в Интернете.Я могу использовать функцию summarySE для каждого отдельного фрейма данных, если вызываю его по отдельности.Например, вот функция сводки:
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE){
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE) {
if (na.rm) sum(!is.na(x))
else length(x)
}
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col) {
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
},
measurevar
)
# Rename the "mean" column
datac <- rename(datac, c("mean" = measurevar))
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- qt(conf.interval/2 + .5, datac$N-1)
datac$ci <- datac$se * ciMult
return(datac)
}
Я могу выполнить эту функцию следующим образом:
RT.NHX2.sum <-summarySE(Sb_qPCR$RT.NHX2,measurevar="Ct",groupvars = c("Time","ID"))
Поскольку у меня много отдельных фреймов данных в моем фрейме раздельных данных, яхотел написать цикл для запуска функции summarySE в каждом разделе разделенного фрейма данных, но не мог понять, как это сделать.Возможно ли это?
РЕДАКТИРОВАТЬ
Вот пример данных, с которыми я работаю:
> dput(head(Sb_qPCR,5))
structure(list(ID = structure(c(4L, 4L, 4L, 2L, 2L), .Label = c("Sb1_Control",
"Sb1_Salt", "Sb10_Control", "Sb10_Salt"), class = "factor"),
Genotype = structure(c(2L, 2L, 2L, 1L, 1L), .Label = c("Sb1",
"Sb10"), class = "factor"), Tissue = structure(c(2L, 2L,
2L, 2L, 2L), .Label = c("L2", "RT", "TL"), class = "factor"),
Time = structure(c(1L, 1L, 1L, 1L, 1L), .Label = c("t-0m",
"t-12h", "t-1h", "t-24h", "t-2h", "t-30m", "t-3d", "t-3h",
"t-6h"), class = "factor"), Gene = structure(c(3L, 3L, 3L,
3L, 3L), .Label = c("HKT3", "NHX2", "SOS1"), class = "factor"),
Treatment = structure(c(2L, 2L, 2L, 2L, 2L), .Label = c("Control",
"Salt"), class = "factor"), Ct = c(3.1334, 3.2518, 0.6313,
3.4878, 4.1403), Ct_Exp = c(3.1334, 3.2518, 0.6313, 3.4878,
4.1403), Ct_Cont = c(2.1029, 0.0167, 0.5565, 2.7948, 2.2366
), FC_raw = c(0.4895, 0.1062, 0.9495, 0.6186, 0.2673), FC_graph = c(-2.0427,
-9.4155, -1.0532, -1.6166, -3.7416)), row.names = c(NA, 5L
), class = "data.frame")
Первый шаг, который я сделал, былрасщепление фрейма данных.Я сделал это следующим образом:
Sb_qPCR <- split(Sb_qPCR, list(Sb_qPCR$Tissue, Sb_qPCR$Gene))
Это то, что мои разделенные фреймы данных называются:
> names(Sb_qPCR)
[1] "L2.HKT3" "RT.HKT3" "TL.HKT3" "L2.NHX2" "RT.NHX2" "TL.NHX2" "L2.SOS1" "RT.SOS1"
[9] "TL.SOS1"
Далее я хочу использовать функцию summarySE, показанную выше, для суммирования каждого фрейма данных, т.е. L2.HKT3 и сохраните вывод как новый фрейм данных.Я могу добиться этого с помощью этого кода:
RT_SOS1.sum <-summarySE(Sb_qPCR$RT.SOS1,measurevar="Ct",groupvars = c("Time","ID"))
Как мне включить это в цикл, где он будет вызывать каждый кадр данных и сохранять его в новый кадр данных?