1

我有多个类似于以下的 csv 文件。

Library Parameter1
A       3
A       2
A       5
B       2
B       1
B       9
C       4
C       2
C       8

它实际上看起来像这样:CSV 表

在这种情况下,每个 .csv 文件都以化学参数命名,例如“logtPSA.csv”。如您所知,标题是“库”和“值”。我有 4 个不同的库:FDA、SMRNA、VD_SM 和 VD_MV。

我一直在对所有这些进行 ANOVA 测试和 TukeyHSD 测试,但是 R 并没有以将结果分成单元格的格式给出它,所以我可以复制并粘贴到 Excel 中,因此如果我要手动进行它会变得相当乏味。

我想知道是否有某种方法可以编写一个函数,一次遍历我的所有文件,执行测试,并将其全部输出到两个整洁的表中(1 个用于 ANOVA,1 个用于 TukeyHSD)。

4

1 回答 1

1

有多种方法可以做到这一点,这只是一种:

导入所有数据文件

setwd("C:/Users/VANBE/Desktop")
files = dir(".", pattern = ".csv")
files.dir = paste(getwd(),"/" ,files,sep="")
load = lapply(files.dir, read.csv2,header=T,sep=",",dec=".")
names(load)=unlist(strsplit(files,".csv")) # not truly necesary

外观示例

load = list(FILENAME1=data.frame(x=1699:1722,Library=c(rep("FDA",18),rep("SMMRMA",6)),logtPSA=rnorm(1.5,1,24)),
            FILENAME2=data.frame(x=1699:1722,Library=c(rep("FDA",18),rep("SMMRMA",6)),logtELSE=rnorm(2,1,24)))

将结果放入数据框中

load= lapply(load, function(x) {names(x) = c("number","library","parameter");  return(x) }) # make sure columnnames of al items are identical

f.AN = function(x){out=aov(parameter ~ library,x)
AN=summary(out)[[1]]}
f.TU = function(x){out=aov(parameter ~ library,x)
TU=TukeyHSD(out)[[1]]}

AN = do.call("rbind",lapply(load,f.AN))
TU = do.call("rbind",lapply(load,f.TU))
于 2016-07-19T12:37:22.863 回答