我有六个excel文件,它们都具有相同的格式和相同的变量数(但是不同的观察结果)。我有一段代码,需要将它们全部运行并导出结果( stat测试中的p值),但我想知道如何让代码贯穿所有6个文件并导出6个唯一的文件。
代码很好用,但我必须分别上传每个文件,每次都以不同的名称导出它。
data <- MorePercent & MoreCount & LessPercent & LessCount
#Data
Type Neutrophils Monocytes NKC .....
------------------------------------------
IN 546 2663 545
IN 0797 7979 008
OUT 0899 3899 345
OUT 6868 44533 689
HC 9898 43443 563
#Kruskal and export
PV <- as.data.frame(apply(data[-1], 2,
function(x) kruskal.test(x = x, g = data$Type)$p.value))
#rename col
colnames(PV) <- "PVal"
#export
write.xlsx(PV, "C:/Users/sxa074/Desktop/P01/Science Trans Med Follow Up/test2.xlsx")
#Post Hoc and export
PV1 <- as.data.frame(apply(data[-1], 2,
function(x) pairwise.wilcox.test(x = x, g = data$Type, p.adjust.method = "BH")$p.value))
#Omit NA row
PV1 <- na.omit(PV1)
#Rename Rows
row.names(PV1) <- c("HC vs In", "HC vs OUT", "IN vs OUT")
#Export
write.xlsx(PV1, "C:/Users/sxa074/Desktop/P01/Science Trans Med Follow Up/test2A.xlsx")我目前正在为每个原始文件导出两个excel文件(Kruskal值和Wilcox值),但是我必须手动进入并每次调整名称。我希望代码通过所有这些代码并导出唯一的文件。
在此之前,非常感谢您。
发布于 2019-05-14 22:15:49
在这里,for循环似乎是合适的。此解决方案假定您的数据位于一个目录中,而您的结果将放在另一个目录中。但是,他们可以在同一个目录中。在这个解决方案中,来自Kruskal测试和的p-值-来自配对Wilcoxon测试的p-值被组合成一个表,该表将保存为一个Excel文件。
如果您对合并结果感兴趣,可以使用write.xlsx()中的write.xlsx()选项创建一个包含多个工作表的单个Excel文件。
在本例中,您需要(当然)用适当的参数替换占位符"<...>“。
# Define directories of data and results
dataPath <- <directory with flow data>
resultsPath <- <directory for results>
# Vector of file names; a pattern for old and new Excel files is "xlsx?$"
ff <- list.files(path = dataPath, pattern = "<pattern>", full = TRUE)
# Good old fashioned for loop
for (f in ff) {
data <- read.xslx(f, <other parameters>) # edit as required
pv1 <- apply(data[-1], 2, function(x) kruskal.test(x, data$Type)$p.value)
pv1 <- t(pv1) # transpose 3 x 1 result to 1 x 3
pv2 <- apply(data[-1], 2, function(x) pairwise.wilcox.test(x, data$Type,
p.adjust.method = "BH")$p.value)
pv2 <- na.omit(pv2)
ans <- rbind(pv1, pv2)
rownames(ans) <- c("Pval", "HC vs In", "HC vs OUT", "IN vs OUT")
fout <- file.path(resultsPath, paste("RESULTS", basename(f), sep = "_"))
write.xlsx(ans, fout, rowNames = TRUE)
}编辑
关于占位符"<...>“变量:
对于目录,这只是文件的位置。例如,如果每个实验使用一个目录,数据和结果都可以存储在同一个目录中。在Windows机器上,这可能类似于"C:\Users\Owner\Documents\Flow Analysis\2019_0512"。dataPath和resultsPath都将设置为该值。顺便说一句,您可以使用以下代码提取保存所选文件的数据目录。函数file.choose()允许您通过通常的操作系统对话框选择一个文件。
dataPath <- dirname(file.choose())有关list.files()函数,请参见list.files (或dir)的帮助函数。pattern选项指定一个正则表达式,该表达式只能用于选择数据文件。例如,如果六个数据文件看起来像"FlowFile001.xlsx“、"FlowFile002.xlsx”、.、"FlowFile006.xlsx“,那么指定这些文件的正则表达式模式可以是"Flow.*xlsx$”。(如果不熟悉正则表达式的世界,请查阅regex。)
read.xslx()的参数取决于您在Excel文件中的数据结构。例如,它可以包括使用skipEmptyRows = TRUE跳过空白行。
https://stackoverflow.com/questions/56138098
复制相似问题