Как я могу выполнить мой код через различные файлы Excel и экспортировать уникальные файлы результатов в R? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть шесть файлов Excel, все с одинаковым форматом и одинаковым количеством переменных (но с разными наблюдениями).У меня есть кусок кода, который мне нужен, чтобы выполнить их все и экспортировать результаты (значения p из stat test), но мне интересно, как я могу выполнить код через все шесть файлов и экспортировать шесть уникальных файлов.

Код работает отлично, но мне приходится загружать каждый файл отдельно и каждый раз экспортировать его под разными именами.

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 Pи значения Уилкокса Р), но я должен входить вручную и корректировать имена каждый раз.Я хочу, чтобы код прошел через все из них и экспортировал уникальные файлы.

Заранее большое спасибо.

1 Ответ

1 голос
/ 15 мая 2019

A for петля кажется здесь уместной. Это решение предполагает, что ваши данные находятся в одном каталоге, а ваши результаты должны быть размещены в другом. Однако они могут находиться в одном каталоге. В этом решении p-значения из теста Крускала-Уоллиса и 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)
  }

EDIT

Относительно переменных-заполнителей "<...>":

Для каталогов это просто расположение файлов. Например, если для каждого эксперимента должен использоваться один каталог, данные и результаты могут храниться в одном и том же каталоге. На компьютере с 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.

...