What would be the best way to read a list of filenames and headings from a
csv file?
The CSV file is structured as two columns, with column one being the
filename and column two being a heading e.g.:
ANA110915004A_3PERIOD_TmAvg-rdata.csv,Pre-DA
ANA110915006A_3PERIOD_TmAvg-rdata.csv,DA-10^-6
ANA110915012A_3PERIOD_TmAvg-rdata.csv,DA-10^-4
ANA110915016A_3PERIOD_TmAvg-rdata.csv,Washout
I want to be able to open the file using read.csv and use the heading as
the header of a graph.
Reading the filenames from the directory with list.files() works but then I
don't have the headings that go with the file e.g.:
filenames<-list.files(pattern="*.csv")
for (i in seq_along(filenames)) {
con<-read.csv(filenames[i], headers=TRUE, sep=',')
}
I tried the code below (which I posted in a different thread) but the
solutions that people offered me didn't get it to work. The code results in
'Error in read.table(file = file, header = header, sep = sep, quote quote,
:
'file' must be a character string or connection
# Read filenames from csv file
files <- read.csv(file="files.csv",head=FALSE,sep=",")
# for each filename read the file
for (i in 1:length(files)) {
# f becomes the next row inthe file
f<-files[i,]
# the header to be used for the graph is in column 2 of f
head=f[2]
par(mfrow=c(4,2))
# the filename to be used is in column 1 of f
con<-read.csv(file=f[1], header=TRUE, sep=',')
tmp<-con$value2
data<-normalize_js(tmp,-1,1)
time<-con$time
# run the waveform analyser
waveformanalyser(data,time,head)
}
Regards
Jannetta
--
==================================Web site: http://www.jannetta.com
Email: jannetta@henning.org
==================================
[[alternative HTML version deleted]]
Hi Janetta, At a first guess, you need: files <- read.csv(file="files.csv",head=FALSE,sep=",", stringsAsFactors=FALSE) str(files) would clear up any confusion as to whether the contents of the first column of files are character or not. If that doesn't help, then setting i <- 1 and running each line of code in the loop individually (copy and paste) will give you a clearer idea of where problems arise. Sarah On Thu, Jul 11, 2013 at 9:01 AM, Jannetta Steyn <jannetta at henning.org> wrote:> What would be the best way to read a list of filenames and headings from a > csv file? > > The CSV file is structured as two columns, with column one being the > filename and column two being a heading e.g.: > ANA110915004A_3PERIOD_TmAvg-rdata.csv,Pre-DA > ANA110915006A_3PERIOD_TmAvg-rdata.csv,DA-10^-6 > ANA110915012A_3PERIOD_TmAvg-rdata.csv,DA-10^-4 > ANA110915016A_3PERIOD_TmAvg-rdata.csv,Washout > > > I want to be able to open the file using read.csv and use the heading as > the header of a graph. > > Reading the filenames from the directory with list.files() works but then I > don't have the headings that go with the file e.g.: > filenames<-list.files(pattern="*.csv") > for (i in seq_along(filenames)) { > con<-read.csv(filenames[i], headers=TRUE, sep=',') > } > > I tried the code below (which I posted in a different thread) but the > solutions that people offered me didn't get it to work. The code results in > 'Error in read.table(file = file, header = header, sep = sep, quote > quote, : > 'file' must be a character string or connection > > # Read filenames from csv file > files <- read.csv(file="files.csv",head=FALSE,sep=",") > > # for each filename read the file > for (i in 1:length(files)) { > # f becomes the next row inthe file > f<-files[i,] > # the header to be used for the graph is in column 2 of f > head=f[2] > par(mfrow=c(4,2)) > # the filename to be used is in column 1 of f > con<-read.csv(file=f[1], header=TRUE, sep=',') > tmp<-con$value2 > data<-normalize_js(tmp,-1,1) > time<-con$time > # run the waveform analyser > waveformanalyser(data,time,head) > } > > Regards > Jannetta > > -- > > ==================================> Web site: http://www.jannetta.com > Email: jannetta at henning.org > ==================================> > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > 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.-- Sarah Goslee http://www.functionaldiversity.org
Hi,
Try this:
files1<-read.csv("files.csv",header=TRUE,stringsAsFactors=FALSE)
?str(files1)
#'data.frame':??? 2 obs. of? 2 variables:
# $ Col1: chr? "ANA110915004A_3PERIOD_TmAvg-rdata.csv"
"ANA110915006A_3PERIOD_TmAvg-rdata.csv"
# $ Col2: chr? "Pre-DA" "DA-10^-6"
files1
#?????????????????????????????????? Col1???? Col2
#1 ANA110915004A_3PERIOD_TmAvg-rdata.csv?? Pre-DA
#2 ANA110915006A_3PERIOD_TmAvg-rdata.csv DA-10^-6
#Using some fake data
lapply(seq_len(nrow(files1)),function(i)
{x1<-read.csv(file=files1[i,1],header=TRUE,sep="",check.names=FALSE);x1[files1[i,2]]})
[[1]]
#? Pre-DA
#1????? 2
#2????? 3
#3????? 6
#4????? 4
#[[2]]
?# DA-10^-6
#1??????? 9
#2?????? 14
#3?????? 13
#4?????? 21
Hope this helps.
A.K.
----- Original Message -----
From: Jannetta Steyn <jannetta at henning.org>
To: r-help <r-help at r-project.org>
Cc:
Sent: Thursday, July 11, 2013 9:01 AM
Subject: [R] Reading a list of filenames from a csv file
What would be the best way to read a list of filenames and headings from a
csv file?
The CSV file is structured as two columns, with column one being the
filename and column two being a heading e.g.:
ANA110915004A_3PERIOD_TmAvg-rdata.csv,Pre-DA
ANA110915006A_3PERIOD_TmAvg-rdata.csv,DA-10^-6
ANA110915012A_3PERIOD_TmAvg-rdata.csv,DA-10^-4
ANA110915016A_3PERIOD_TmAvg-rdata.csv,Washout
I want to be able to open the file using read.csv and use the heading as
the header of a graph.
Reading the filenames from the directory with list.files() works but then I
don't have the headings that go with the file e.g.:
filenames<-list.files(pattern="*.csv")
for (i in seq_along(filenames)) {
? con<-read.csv(filenames[i], headers=TRUE, sep=',')
}
I tried the code below (which I posted in a different thread) but the
solutions that people offered me didn't get it to work. The code results in
'Error in read.table(file = file, header = header, sep = sep, quote quote,?
:
? 'file' must be a character string or connection
# Read filenames from csv file
files <- read.csv(file="files.csv",head=FALSE,sep=",")
# for each filename read the file
for (i in 1:length(files)) {
? # f becomes the next row inthe file
? f<-files[i,]
? # the header to be used for the graph is in column 2 of f
? head=f[2]
? par(mfrow=c(4,2))
? # the filename to be used is in column 1 of f
? con<-read.csv(file=f[1], header=TRUE, sep=',')
? tmp<-con$value2
? data<-normalize_js(tmp,-1,1)
? time<-con$time
? # run the waveform analyser
? waveformanalyser(data,time,head)
}
Regards
Jannetta
--
==================================Web site: http://www.jannetta.com
Email: jannetta at henning.org
==================================
??? [[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
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.