如何让我的代码在不同的excel文件中运行,并在R中导出结果的唯一文件?
我有六个excel文件,所有这些文件都具有相同的格式和相同数量的变量(但观察值不同)。我有一段代码需要运行它们并导出结果(stattest中的p值),但我想知道如何让代码运行所有六个文件并导出六个唯一的文件 代码工作得很好,但我必须分别上传每个文件,并每次以不同的名称导出它如何让我的代码在不同的excel文件中运行,并在R中导出结果的唯一文件?,r,loops,export,R,Loops,Export,我有六个excel文件,所有这些文件都具有相同的格式和相同数量的变量(但观察值不同)。我有一段代码需要运行它们并导出结果(stattest中的p值),但我想知道如何让代码运行所有六个文件并导出六个唯一的文件 代码工作得很好,但我必须分别上传每个文件,并每次以不同的名称导出它 data <- MorePercent & MoreCount & LessPercent & LessCount #Data Type Neutrophils Monocyt
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")
dataAfor
循环在这里似乎合适。此解决方案假定您的数据位于一个目录中,并且您的结果将放置在另一个目录中。但是,它们可以位于同一目录中。在该解决方案中,Kruskal-Wallis测试的p值和成对Wilcoxon测试的p值被合并到一个表中,该表将保存为Excel文件
如果您对合并结果感兴趣,可以使用write.xlsx()
中的sheetName
选项创建一个包含多张工作表的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)
}
有关list.files()
功能,请参阅list.files
(或dir
)的帮助功能。pattern
选项指定一个正则表达式,该表达式可用于仅选择数据文件。例如,如果六个数据文件看起来像“FlowFile001.xlsx”、“FlowFile002.xlsx”、“FlowFile006.xlsx”,那么指定这些文件的正则表达式模式可以是“Flow.*.xlsx$”。(如果不熟悉正则表达式,请查阅regex
,了解正则表达式的世界。)
read.xslx()
的参数取决于Excel文件中数据的结构。例如,它可以包括使用skipmptyrows=TRUE
跳过空白行,David,这非常有用,谢谢!将两个测试的P值放在同一张表上实际上更容易。就“”而言,您能否指定参数的含义?那是我文件的位置吗?请原谅,我一般对循环不是很熟悉!很高兴知道它有帮助。如果您想使用R(或任何编程语言/环境)自动化分析,那么绝对值得学习基本循环和应用
函数系列。我添加了一个编辑来详细说明“
”占位符的性质。
dataPath <- dirname(file.choose())