2012-03-25 7 views
2

現在、簡単な電流 - 電圧実験の結果を視覚化するためにggplot2を使用しようとしています。私はもちろん、1セットのデータに対して良い結果を達成することができました。ggplot2の物理実験からデータを整理する

しかし、私は(最小限のコードを参照してください)再帰的に以下の組織を得るためにRでI入力電流 - 電圧データセットの数を、持っている:

data.frame(cbind(batch(string list), sample(string list), dataset(data.frame list))) 

編集:私のデータはテキストファイル名で保存されていますbatchname_samplenumber.txtには電圧と電流の列があります。

require(plyr) 
require(ggplot2) 

#VARIABLES 
regex <- "([[:alnum:]_]+).([[:alpha:]]+)" 
regex2 <- "G5_([[:alnum:]]+)_([[:alnum:]]+).([[:alpha:]]+)" 

#FUNCTIONS 
getJ <- function(list, k) llply(list, function(i) llply(i, function(i, indix) getElement(i,indix), indix = k)) 

#FILES 
files <- list.files("Data/",full.names= T) 

#NAMES FOR FILES 
paths <- llply(llply(files, basename),function(i) regmatches(i,regexec(regex,i))) 
paths2 <- llply(llply(files, basename),function(i) regmatches(i,regexec(regex2,i))) 
names <- llply(llply(getJ(paths, 2)),unlist) 
batches <- llply(llply(getJ(paths2, 2)),unlist) 
samples <- llply(llply(getJ(paths2, 3)),unlist) 

#SETS OF DATA, NAMED 
sets <- llply(files,function(i) read.table(i,skip = 0, header = F)) 
names(sets) <- names 
for (i in as.list(names)) names(sets[[i]]) <- c("voltage","current") 

df<-data.frame(cbind(batches,samples,sets))  

、最小限のデータを介して生成することができます:私はそれらをインポートするために使用するコードです

require(plyr) 

batch <- list("A","A","B","B") 
sample <- list(1,2,1,2) 
set <- list(data.frame(voltage = runif(10), current = runif(10)),data.frame(voltage = runif(10), current = runif(10)),data.frame(voltage = runif(10), current = runif(10)),data.frame(voltage = runif(10), current = runif(10))) 

df<-data.frame(cbind(batch,sample,set)) 

私の質問です:コードを使用してプロットすることであるとして、それの可能なデータを使用することです次のような(動作しません)?

ggplot(data, aes(x = dataset$current, y = dataset$voltage, colour = sample)) + facet_wrap(~batch) 

より一般的なバージョンであろうが:(ダイヤモンド、車など)の統計データを離散とは対照的に、生の物理的データをhandelingのggplot2ことができますか?

+1

「再帰的にRにデータを入力環境」のあなたの記述があります非常に不明。さらに、「統計データ」と「生の物理データ」の区別がどういうものであるかは不明です。データはデータです。適切に整理するのはあなた次第です。おそらく、ここのガイドライン[here](http://stackoverflow.com/q/5963269/324364)に従って、具体的で再現可能な例を提供するべきでしょう。 – joran

+0

リストをdata.frame形式にしたいと思うかもしれません。 data.frame(batch = your.list [1]、sample = your.list [2]、your.list [3])でこれを行うことができます。いくつかのトレイル:do(your.list、rbind)、reshape、... –

+0

あなたのコメントをいただきありがとうございます、私はそれはちょうど溶融とggplot2の周りに私の頭をラッピングの問題です確信しています。しかし、私は各ggplot2ダイヤモンドと車の例を見て、リンクされた変数を使って何も見つからなかった(電流の値が電圧の値と同じように)。したがって、私の質問です。私はジョランのコメントに続き、さらに詳しい情報を追加しました。再度、感謝します。 –

答えて

1

、私は次のような戦略を示唆している:

read_custom <- function(f, ...) { 
d <- read.table(f, ...) 
names(d) <- c("V", "I") 
## extract sample and batch from the base filename 
ids <- strsplit(gsub(".txt", "", f), "_") 
d$batch <- ids[[1]][1] 
d$sample <- ids[[1]][2] 
d 
} 

## list files to read 
files <- list.files(pattern=".txt") 
## read them all in a single data.frame 
m <- ldply(files, read_custom) 
+0

これは私が探していたようです。それは非常にきちんと感じる。ありがとうございました !私は今日これを開いたままにして、somoneがもっと何かを示唆しているかどうかを確認し、私に権利があるときに投票します。 –

+0

私は今あなたに値する+1を与えることができます:) –

1

サンプル名がデータセットに対してどのように定義されているかは不明です。 ggplot2の一般的な考え方は、すべてのデータを溶けた(長い形式の)data.frame形式でグループ化することです。

新しく定義された問題(「batchname_samplenumber.txt」という名前の2つの列のファイル)で
library(ggplot2) 
library(plyr) 
library(reshape2) 

l1 <- list(batch="b1", sample=paste("s", 1:4, sep=""), 
      dataset=data.frame(current=rnorm(10*4), voltage=rnorm(10*4))) 
l2 <- list(batch="b2", sample=paste("s", 1:4, sep=""), 
      dataset=data.frame(current=rnorm(10*4), voltage=rnorm(10*4))) 
l3 <- list(batch="b3", sample=paste("s", 1:4, sep=""), 
      dataset=data.frame(current=rnorm(10*4), voltage=rnorm(10*4))) 

list_to_df <- function(l, n=10){ 

    m <- l[["dataset"]] 
    m$batch <- l[["batch"]] 
    m$sample <- rep(l[["sample"]], each=n) 
    m 
} 

## list_to_df(l1) 

m <- ldply(list(l1, l2, l3), list_to_df) 

ggplot(m) + facet_wrap(~batch)+ 
    geom_path(aes(current, voltage, colour=sample)) 
+0

ありがとうございました。私の質問ではっきりとしていなかったのに、あなたは私が描いたものをかなり正確に理解することができました(今編集されています)。私は現在あなたのコードを私のケースに適応しようとしています。 –

関連する問題