Удалить строку, содержащую конкретный столбец NA для нескольких больших фреймов данных в глобальной среде - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть большое количество файлов CVS, которые нужно привести в порядок, удалив все строки, которые не указаны в определенном столбце. Поэтому вместо того, чтобы открывать каждый из них вручную в Excel, я хочу знать, возможно ли написать код R, который будет:

  1. Загрузить все файлы CSV из папки в R
  2. Удалить все строки, которые не указаны в определенном столбце («Ошибка») для каждого файла данных отдельно
  3. Изменить все оставшиеся н / д на ""
  4. Сохранение приведенных данных в виде отдельных файлов Excel (с сохранением оригинальных имен плюс немного в конце, чтобы я мог отличить RAW-файл от обработанного)

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

Это то, что у меня сейчас, если я делаю файлы по одному:

setwd('#folderlocation')
df <- read.csv("#filename",
           header=TRUE)
working <- df[!is.na(df$Error),]
working <- sapply(working, as.character)
working[is.na(working)] <- ""
library(xlsx)
write.xlsx(working,"test.xlsx")

Мне удалось импортировать список файлов, используя этот код:

temp=list.files(pattern=".CSV")
for(i in 1:length(temp)){assign(temp[i],read.csv(temp[i]))}

но я застрял в том, как мне поступить оттуда.

Конечный результат, который мне нужен, заключается в том, что каждый файл, обработанный с использованием кода, не будет содержать пустых строк в столбце «Ошибка» и будет сохранен в виде файла Excel. Я ни в коем случае не хочу объединять кадры данных, так как это будет слишком беспорядочным, пытаясь распутать, какие данные принадлежат какому файлу.

Спасибо за вашу помощь, ребята: -)

1 Ответ

0 голосов
/ 29 апреля 2019

Ваш Rscript myscript.R:

library(xlsx)
args = commandArgs(trailingOnly=TRUE)
df <- read.csv(args[1], header=TRUE)
working <- df[!is.na(df$Error),]
working <- sapply(working, as.character)
working[is.na(working)] <- ""
write.xlsx(working,paste(args[1], "test.xlsx", sep="_")

Теперь, если вы работаете с Unix-системой, вы можете открыть терминал и запустить следующее, чтобы запустить цикл for для всех файлов, которые заканчиваются на ".CSV" в папке /folder/with/input/data:

bash
cd /folder/with/input/data
for FILE in *.CSV
 do
  Rscript myscript.R $FILE
 done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...