R for循环来总结数据矩阵

时间:2014-05-15 13:39:10

标签: r for-loop

R的新用户(比如2天的新用户)和来自MATLAB的语法细微差别让我有点疯狂。如果有人能指出我关于这个主题的方向,我会非常感激。我有这个数据集(fl1.back),它有32个变量(列)和513个度量(行),我想创建一个包含32列数据中9个的基本统计表的表。还有一个单独的数据集(fl2.back),我也想从最终表中提取1列数据。

以下是我用于执行fl1.backfl2.back中的1列数据(钠测量)的上述任务的代码:

fl1.back <- read.delim("web.flat",comment.char="#",colClasses="character")
fl1.back <- fl1.back[-1,]
fl2.back <- read.delim("web.flat2",comment.char="#",colClasses="character")
fl2.back <- fl2.back[-1,]
head(fl1.back)
head(fl2.back)

#for rep criteria for sodium
back.sod.rep <- fl2.back[fl2.back$P00930!="",]
back.sod.rep$P00930 <- as.numeric(back.sod.rep$P00930)
back.sod.rep$P00930

#for samples...sodium 
back.sod <- fl1.back[fl1.back$P00930!="",] 
back.sod$P00930 <- as.numeric(back.sod$P00930)
back.sod$P00930
head(back.sod)
back.sod.summ <- data.frame("Sodium")
back.sod.summ
colnames(back.sod.summ) <- "Compound"

back.sod.summ$WQ_crit <- "20 mg/L"
back.sod.summ$n <- nrow(back.sod)
back.sod.summ$n_det <- nrow(back.sod[back.sod$R00930!="<",]) 

back.sod.summ$min <- min(back.sod[back.sod$R00930!="<","P00930"])
back.sod.summ$max <- max(back.sod[back.sod$R00930!="<","P00930"])
back.sod.summ$mean <- mean(back.sod[back.sod$R00930!="<","P00930"])
back.sod.summ$median <- median(back.sod[back.sod$R00930!="<","P00930"])
back.sod.summ$percent_samp_det <- 100*(back.sod.summ$n_det/back.sod.summ$n)
back.sod.summ$percent_samp_above_crit <- 100*(length(back.sod[back.sod$P00930>20,"P00930"])/back.sod.summ$n)
back.sod.summ$percent_rep_above_crit <- (sum(back.sod.rep$P00930>=20)/(nrow(back.sod.rep)))

back.sod$P00930
length(back.sod[back.sod$P00930>back.sod.summ$WQ_crit,"P00930"])

back.sod.summ
final <- data.frame(back.sod.summ)

不是重写/复制和粘贴上面的代码来创建数据框final,我想循环遍历这两个数据集,因为我想重复相同的任务,只是在不同的数据列上。我真的不知道从哪里开始,在R中似乎没有太多关于for循环的文献。

非常感谢任何见解!

1 个答案:

答案 0 :(得分:0)

以下是使用iris数据集我想要的想法的示例:

library(plyr)
dlply(iris, .(Species), summary)

如果您需要其他统计数据,可以延长此范围。无论如何,您可能应该使用(如上所示)在各种函数和包中实现的“split-apply-combine”方法。