我有六个excel文件,所有文件都具有相同的格式和相同数量的变量(但观察结果有所不同)。我有一段代码需要全部运行并导出结果(来自stat test的p值),但是我想知道如何让代码贯穿所有六个文件并导出六个唯一文件。
该代码很好用,但是我不得不分别上传每个文件,并每次以不同的名称导出它。
data = tf.data.Dataset.from_tensor_slices((X, y))
data = data.apply(tf.data.experimental.shuffle_and_repeat(buffer_size=len(y)))
data = data.batch(batch_size, drop_remainder=False)
data = data.prefetch(2)
我目前正在为每个原始文件(Kruskal P值和Wilcox P值)导出两个Excel文件,但是我必须手动输入并每次都调整名称。我希望代码能在所有代码中运行并导出唯一文件。
非常感谢。
答案 0 :(得分:1)
这里for
循环似乎很合适。此解决方案假定您的数据位于一个目录中,而结果将放在另一个目录中。但是,它们可以位于同一目录中。在此解决方案中,来自Kruskal-Wallis检验的p值和来自成对Wilcoxon检验的p值被合并到一个表中,该表将另存为Excel文件。
如果您希望合并结果,可以使用sheetName
中的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”,则指定这些文件的正则表达式模式可以是“流。* xlsx $”。 (如果不熟悉,请查阅regex
,以了解正则表达式的世界。)
read.xslx()
的参数取决于Excel文件中数据的结构。例如,它可以包括使用skipEmptyRows = TRUE
跳过空白行。