首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让我的代码在不同的excel文件中运行,并在R中导出唯一的结果文件?

如何让我的代码在不同的excel文件中运行,并在R中导出唯一的结果文件?
EN

Stack Overflow用户
提问于 2019-05-14 20:25:21
回答 1查看 47关注 0票数 0

我有六个excel文件,它们都具有相同的格式和相同的变量数(但是不同的观察结果)。我有一段代码,需要将它们全部运行并导出结果( stat测试中的p值),但我想知道如何让代码贯穿所有6个文件并导出6个唯一的文件。

代码很好用,但我必须分别上传每个文件,每次都以不同的名称导出它。

代码语言:javascript
复制
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值),但是我必须手动进入并每次调整名称。我希望代码通过所有这些代码并导出唯一的文件。

在此之前,非常感谢您。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 22:15:49

在这里,for循环似乎是合适的。此解决方案假定您的数据位于一个目录中,而您的结果将放在另一个目录中。但是,他们可以在同一个目录中。在这个解决方案中,来自Kruskal测试的p-值-来自配对Wilcoxon测试的p-值被组合成一个表,该表将保存为一个Excel文件。

如果您对合并结果感兴趣,可以使用write.xlsx()中的write.xlsx()选项创建一个包含多个工作表的单个Excel文件。

在本例中,您需要(当然)用适当的参数替换占位符"<...>“。

代码语言:javascript
复制
# 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"dataPathresultsPath都将设置为该值。顺便说一句,您可以使用以下代码提取保存所选文件的数据目录。函数file.choose()允许您通过通常的操作系统对话框选择一个文件。

代码语言:javascript
复制
  dataPath <- dirname(file.choose())

有关list.files()函数,请参见list.files (或dir)的帮助函数。pattern选项指定一个正则表达式,该表达式只能用于选择数据文件。例如,如果六个数据文件看起来像"FlowFile001.xlsx“、"FlowFile002.xlsx”、.、"FlowFile006.xlsx“,那么指定这些文件的正则表达式模式可以是"Flow.*xlsx$”。(如果不熟悉正则表达式的世界,请查阅regex。)

read.xslx()的参数取决于您在Excel文件中的数据结构。例如,它可以包括使用skipEmptyRows = TRUE跳过空白行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56138098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档