2016-03-02 82 views
0

我想讀取多個csv文件並使用ggplot爲每個文件做一些繪圖。我想用每個輸入文件的文件名打印數字。每個csv文件有6列,但Im只繪製1,2,5,6列。讀取多個csv文件並獲取每個csv文件的文件名在R

我有一個代碼,但僅適用於一個CSV文件:

dat<-read.csv("D135_tmin.csv",header=TRUE) 
    dat$Year<-seq(ymd('1991-01-01'),ymd('2000-12-31'),"days") 
    dat2 <- dat[,c(1,2,5,6)] 
    names(dat2)[3:4] <- c("P10","P90") 
    dat2 <- melt(dat2,id.vars="Year") 
    ggplot(dat2[dat2$variable=="Tmin",],aes(Year,value))+ 
    geom_line(linetype="dashed",color="black",size=0.25)+ 
    geom_point(data=dat2,aes(Year,value,grp=variable,fill=variable),pch=21,size=2)+ 
    scale_fill_manual(name="Legend",values=c("Tmin"="dark slate blue","P90"="green","P10"="orange")) 
    dev.print(pdf, file="D135_tmin.pdf") 

當讀取多個CSV文件,我使用以下命令:

 temp=list.files(pattern="*.csv") 
    myfiles=lapply(temp,read.table,header=TRUE) 

我的問題是,我會讀100個csv文件和輸出pdf應該與輸入的csv文件具有相同的名稱。

有什麼建議嗎?

+0

在你的'lapply'運行'setNames(myfiles,temp)' – Benjamin

回答

1

是否有你不想使用for循環的原因?你可以這樣做:

for (i in list.files(pattern="*.csv"){ 
    dat <- read.csv(i) 
    dat$Year<-seq(ymd('1991-01-01'),ymd('2000-12-31'),"days") 
    dat2 <- dat[,c(1,2,5,6)] 
    names(dat2)[3:4] <- c("P10","P90") 
    dat2 <- melt(dat2,id.vars="Year") 
    ggplot(dat2[dat2$variable=="Tmin",],aes(Year,value))+ 
      geom_line(linetype="dashed",color="black",size=0.25)+ 
    geom_point(data=dat2,aes(Year,value,grp=variable,fill=variable), 
     pch=21,size=2)+ 
     scale_fill_manual(name="Legend",values= 
     c("Tmin"="dark slate blue","P90"="green","P10"="orange")) 
    dev.print(pdf, file=sub("csv", "pdf", i)) 
} 
+0

很多非常感謝你的建議 – Liliputian