1

我有许多(超过 100 个)具有相同表结构的 csv 文件,例如,所有表头都在第 4 行,它们都有 6 列,数据从第 5 行到第 400001 行,

我需要将这些数据绘制在散点图中,其中 x 显示第一列(40001 时间单位),其他列是不同变量的 Y,[如果我能够格式化绘图(颜色、范围、标题、图例,则更可取) , ...)] 并自动输入这些 csv 文件并导出 png 或 pdf 或其他任何可能有用的东西,我同时拥有 Excel 和 R,但我不知道如何以有效的方式进行绘图。(命名也很重要,它们应具有其 CSV 文件的名称)

关于如何以更少的努力做到这一点的任何想法?

谢谢

4

1 回答 1

3

你的问题对具体细节有点轻,所以我将做一些假设,以开始一种答案的骨架。

让我们制作一些假的 CSV 文件作为示例数据

将工作目录设置为包含数据的文件夹...

setwd("C:/my-csv-files")

制作 100 个 6 列乘 500 行的数据帧(以保持快速)...

df <- lapply(1:100, function(i) data.frame(cbind(1:500, matrix(sample(1000), 500, 5))))

从工作目录中的这些数据帧制作 100 个 csv 文件...

lapply(1:length(df), function(i) write.csv(df[[i]],file=paste("df",i,"csv",sep=".")))

现在我们可以重现您的问题并像这样快速将许多 CSV 文件读入 R ...

# create a list of all CSV files in all the folders 
files <- (dir("C:/my-csv-files", recursive=TRUE, full.names=TRUE, pattern="\\.(csv|CSV)$"))
# read in the CSV files and add the filename of each file as a column to
# each dataset so we can trace back dodgy data 
# so, create a function to read the CSV and get filenames
read.tables <- function(file.names, ...) {
  require(plyr)
  ldply(file.names, function(fn) data.frame(Filename=fn, read.csv(fn, ...)),.progress = 'text')
}
# execute function to read in data from each CSV, including file names of file that data comes from
mydata <- read.tables(files, stringsAsFactors = FALSE)

现在plot data,你说你只想要一个 CSV 文件中所有数据的图......

融入绘图格式,这X1是您的时间变量,X2toX5是 CSV 文件中的其他变量

require(reshape2)
dat <- melt(mydata, id.vars = c("X1"), measure.vars = c("X2", "X3", "X4", "X5"))

这是您的时间变量与其他变量(颜色编码)的单个散点图。从您的问题中不清楚您想要绘制什么,所以请询问另一个更详细的问题。

require(ggplot2)
ggplot(dat, aes(X1, value)) +
  geom_point(aes(colour = factor(variable)))

现在,将其保存为 PDF 或 PNG,请参阅?ggsave此处的众多选项...

ggsave(file="myplot.pdf")
ggsave(file="myplot.png")

找到这些文件的位置

getwd()

要为每个 CSV 文件绘制一个图,这是一种方法

listcsvs <- lapply(files,function(i) read.csv(i,  stringsAsFactors = FALSE))
names(listcsvs) <- files
require(reshape2)
require(ggplot2)
for (i in 1:length(files)) { 
  tmp <- melt(listcsvs[[i]], id.vars = "X1", measure.vars = c("X2", "X3", "X4", "X5"))
  print(ggplot(tmp,aes(X1, value)) + 
          geom_point(aes(colour = factor(variable))) +
          ggtitle(names(listcsvs[i]))
        )
}

如果您使用的是RStudio,您可以滚动查看图表并将您想要保存为 PDF 或 PNG的图表导出。

这涵盖了您问题的主要部分:

  1. 将大量 CSV 文件读入 R
  2. 将数据绘制为一个散点图,针对一个变量显示多个变量
  3. 将数据绘制为每个 CSV 文件的一个散点图
  4. 将绘图保存为 PDF 或 PNG 文件

作为奖励,您已经获得了用于创建示例数据的代码,您可以在未来的问题中使用这些代码。通常,示例数据的质量越好,您得到的答案质量就越高(正如 Thomas 在他的评论中所建议的那样)。

于 2013-11-08T07:11:33.997 回答