1

同じテーブル構造を持つ多数の (100 を超える) csv ファイルがあります。

これらのデータを散布図にプロットする必要があります。x は最初の列 (40001 時間単位) を示し、他の列はさまざまな変数の Y です [プロット (色、範囲、タイトル、凡例) をフォーマットできる場合は望ましい、...)] これらの csv ファイルを自動的に入力し、png や pdf などの便利なものをエクスポートします。Excel と R の両方を持っていますが、このプロットを効率的に行う方法がわかりません。(命名も重要です。CSV ファイルの名前が必要です)

より少ない労力でこれを行う方法について何か考えはありますか?

ありがとう

4

1 に答える 1

3

あなたの質問は特定の詳細に少し軽いので、回答の骨組みのようなものから始めるためにいくつかの仮定を立てます.

サンプルデータ用の偽の CSV ファイルを作成してみましょう

作業ディレクトリをデータを含むフォルダに設定...

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

6 列 x 500 行の 100 データ フレームを作成します (作業を迅速に行うため)...

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)

次に、データをプロットします。CSV ファイル内のすべてのデータの 1 つのプロットが必要だと言います...

プロット用の形式に溶かし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 ファイルごとに 1 つのプロットを作成するには、 1つの方法を次に示します。

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. 1 つの変数に対して複数の変数を表示する 1 つの散布図としてデータをプロットする
  3. CSV ファイルごとに 1 つの散布図としてデータをプロットする
  4. プロットを PDF または PNG ファイルとして保存します

おまけとして、今後の質問で使用できるサンプル データを作成するためのコードがあります。一般に、サンプル データの品質が高いほど、質の高い回答が得られます (Thomas がコメントで示唆しているように)。

于 2013-11-08T07:11:33.997 に答える