Я довольно новичок в R, поэтому я надеюсь, что этот вопрос все еще будет интересен.Я создал цикл for
, который произвел 11 CSV-файлов.Вот код, который я использовал для этого в случае, если это может помочь прояснить вопрос:
for (i in seq(0, 1, by = 0.1))
{collar$results2<-mutate(collar,results2 = case_when( (probability > i & results1 == "POSITIVE") | (probability < i & results1 == "NEGATIVE") ~ TRUE, TRUE ~ FALSE) )
as.character(collar$results2)
collaraccuracy1=paste('collar41361_41365', i, 'csv', sep = '.')
write.csv(collar,collaraccuracy1)}
Как видите, все созданные файлы имеют следующий формат: collar41361_41365.i.csv
, с `` i` в диапазоне от 01 к 0,1, например, так:
[1] "collar41361_41365.0.csv"
[1] "collar41361_41365.0.1.csv"
[1] "collar41361_41365.0.2.csv"
[1] "collar41361_41365.0.3.csv"
[1] "collar41361_41365.0.4.csv"
[1] "collar41361_41365.0.5.csv"
[1] "collar41361_41365.0.6.csv"
[1] "collar41361_41365.0.7.csv"
[1] "collar41361_41365.0.8.csv"
[1] "collar41361_41365.0.9.csv"
[1] "collar41361_41365.1.csv"
Теперь я хотел бы отформатировать все файлы по одному, поскольку они имеют одинаковую структуру (10 столбцов, 240 строк и одинаковый заголовок столбца) и одно и то же имя.формат.
См. Ниже код с действиями, которые я пытался выполнить над этими 11 файлами.Я использовал Sys.glob
, поскольку упоминалось, что это лучший способ выполнить задачу в другом посте.Ранее я закодировал эти действия для одного файла, и это сработало.Теперь я хочу применить код ко всем 11 файлам одновременно:
#1) Reading multiple files at one. Now, this will only work for the files with a decimal value of i in their name -which is fine-. If I was reading files with i=0 or i=1, then we'll have the pattern "collar41361_41365.*.csv". Am I right?
collaraccuracy<-lapply(Sys.glob("collar41361_41365.***.csv"), read.csv)
#2) Select only the columns with header "observed","predicted","probability","results1","results2.results2"
collaraccuracy<-fread("collar41361_41365.***.csv",select=c("observed","predicted","probability","results1","results2.results2"),stringsAsFactors = F)
#3) Rename column "results2.results2" to "results2"
colnames(collaraccuracy)<-c("observed","predicted","probability","results1","results2")
#4) Create 6th column "results" by merging columns "results1" and "results2"
collaraccuracy$results <- paste(collaraccuracy$results2,
collaraccuracy$results1,sep="_")
#5) End of the formatting. Write new formated csv files with the pattern "collar41361_by_41365.i.csv"
collaraccuracy2=paste('collar41361_by_41365', i, 'csv', sep = '.')
write.csv(collaraccuracy,collaraccuracy2)
Как вы можете видеть, у меня есть 5 различных действий для вычисления, в конечном итоге должно быть 9 файлов для значений i (0,1, 0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)
Меня особенно интересует синтаксис в действиях 1) и 2), но это лучшее, что я могу сделать до сих пор.
Какие-нибудь советы, чтобы сформулировать это?Любая помощь приветствуется!
PS Обновление: я пытался создать функцию и применить ее к остальным файлам с помощью lapply
:
collarcolumns<-function(collaraccuracy1)
{collaraccuracy1<-fread(("collar41361_41365.1.csv"),select=c("observed","predicted","probability","results1","results2.results2"),stringsAsFactors = F)
colnames(collaraccuracy1)<-c("observed","predicted","probability","results1","results2")
collaraccuracy1$results <- paste(collaraccuracy1$results2, collaraccuracy1$results1,sep="_")
collaraccuracy2=paste('collar41361_by_41365', i, 'csv', sep = '.')
write.csv(collaraccuracy1,collaraccuracy2)}
lapply(Sys.glob("collar41361_41365.*.csv"), collarcolumns)
И получил 11 "NULL"
s напечатано R .. Я был на правильном пути?