[R] File conca.

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Tue Nov 5 09:29:45 CET 2019


I recommend not using setwd unless you have to (e.g at the beginning of a script run by cron or another task scheduler). It is much simpler to build paths to directories and files using file.path.

On November 5, 2019 12:13:19 AM PST, PIKAL Petr <petr.pikal using precheza.cz> wrote:
>Hi
>
>Help with such operations is rather tricky as only you know exact
>structrure
>of your folders.
>
>see some hints in line
>
>> -----Original Message-----
>> From: R-help <r-help-bounces using r-project.org> On Behalf Of Val
>> Sent: Tuesday, November 5, 2019 4:33 AM
>> To: r-help using R-project.org (r-help using r-project.org)
><r-help using r-project.org>
>> Subject: [R] File conca.
>> 
>> Hi All,
>> 
>> I have data files in several folders and want combine all  these
>files in
>one
>> file.  In each folder  there are several files  and these
>> files have the same structure but different names.   First, in each
>> folder  I want to concatenate(rbind) all files in to one file. While
>I am
>> reading each files and concatenating (rbind) all files, I want to
>added
>the
>> folder name as one variable  in each row. I am reading the folder
>names
>> from a file and for demonstration I am using only two folders  as
>shown
>> below.
>> Data\week1             # folder name 1
>>            WT13.csv
>>            WT26.csv           ...
>>            WT10.csv
>> Data\week2            #folder name 2
>>            WT02.csv
>>            WT12.csv
>> 
>> Below please find  my attempt,
>> 
>> folders=c("week1","week2")
>> for(i in folders){
>>   path=paste("\data\"", i , sep = "")
>>   setwd(path)
>
>you should use 
>wd <- setwd(path)
>
>which keeps the original directory for subsequent use
>
>>   Flist = list.files(path,pattern = "^WT")
>>   dataA =  lapply(Flist, function(x)read.csv(x, header=T))
>>   Alldata = do.call("rbind", dataA)     # combine all files
>>   Alldata$foldername=i                  # adding the folder name
>> 
>
>now you can do
>
>setwd(wd)
>
>to return to original directory
>}
>
>> The above works for  for one folder but how can I do it for more than
>one
>> folders?
>
>You also need to decide if you want all data from all folders in one
>object
>called Alldata or if you want several Alldata objects, one for each
>folder.
>
>In second case you could use list structure for Alldata. In the first
>case
>you could store data from each folder in some temporary object and use
>rbind
>directly.
>
>something like
>
>temp <- do.call("rbind", dataA)
>temp$foldername <- i
>
>Alldata <- temp
>in the first cycle
>and
>Alldata <- rbind(Alldata, temp)
>in second and all others.
>
>Or you could initiate first Alldata manually and use only
>Alldata <- rbind(Alldata, temp)
>
>in your loop.
>
>Cheers
>Petr
>
>> 
>> Thank you in advance,
>> 
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-
>> guide.html
>> and provide commented, minimal, self-contained, reproducible code.

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list