【问题标题】:Reading multiple csv files and getting the filename of each csv file in R读取多个csv文件并获取R中每个csv文件的文件名
【发布时间】:2016-06-14 19:57:42
【问题描述】:

我正在尝试读取多个 csv 文件并使用 ggplot 为每个文件进行一些绘图。我想使用每个输入文件的文件名打印数字。每个 csv 文件有 6 列,但我只绘制 1,2,5,6 列。

我有一个代码,但只适用于单个 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 文件同名。

有什么建议吗?

【问题讨论】:

  • 在你的lapply 之后运行setNames(myfiles, temp)

标签: r csv printing ggplot2


【解决方案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))
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2019-04-03
    • 2014-07-22
    • 2020-12-19
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多