Выполните несколько операций над списком файлов в каталоге и сохраните его с новым динамическим именем файла в R, Lapply?
Я новичок в R и хотел бы прочитать список файлов как отдельные фреймы данных, выполнить несколько операций с каждым и сохранить их как отдельные файлы с динамическими именами файлов. Я думаю, что я должен использовать lappy, но не уверен.
Вот код, который я написал, который работает для одного файла:
df <- read.fwf('USC00011084.dly', widths = c(21, rep(c(5, 1, 1, 1),31)))
df2 <- df[-c(3:5, 7:9, 11:13, 15:17, 19:21, 23:25, 27:29, 31:33, 35:37, 39:41, 43:45, 47:49, 51:53, 55:57, 59:61, 63:65, 67:69, 71:73, 75:77, 79:81, 83:85, 87:89, 91:93, 95:97, 99:101, 103:105, 107:109, 111:113, 115:117, 119:121, 123:125)]
df2[df2=="-9999"]<-NA
df$new <- rowSums(df2[,2:32], na.rm = TRUE)
df2["Total"] <- df$new
colnames(df2) <- c("StationDateType", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "28", "30", "31", "TotalMonthly")
Prcp <- df2[grep("PRCP", df2$StationDateType),]
write.table(Prcp, "USC00011084Prcp.txt", sep="\t", row.names=FALSE)
Как я могу сделать это для списка файлов в каталоге? Есть идеи? Спасибо.
1 ответ
Вы можете попробовать это... Вы можете получить список ваших файлов:
files <- list.files(getwd())
Напишите функцию, которая выполнит необходимый анализ и запишет результаты в таблицу, как вы это сделали. Здесь мы используем tools::file_path_sans_ext для извлечения имени файла (без расширения типа файла) и в конце используем его для именования таблицы, которая будет сохранена в txt.
myFunction <- function(files){
fileName <- tools::file_path_sans_ext(files)
df <- read.fwf(files, widths = c(21, rep(c(5, 1, 1, 1),31)))
# rest of your code
# ...
write.table(Prcp, paste0(fileName, "Prcp.txt"), sep="\t", row.names=FALSE)
}
Вы можете использовать lapply для запуска вашей функции для каждого файла в файлах.
lapply(files, function(x) myFunction(x))