2010-02-12 1 views
3

각각 30 개의 데이터가 실행되며 각 데이터는 별도의 CSV 파일 인 runi.csv, i = 0:29에 저장됩니다.데이터 프레임 목록을 처리하는 R - 관용적 인 방법

내가 모두 목록에 모으고 싶다고 가정 해 봅시다. 나는이 작업을 수행하는 방법을 알고있는 가장 좋은 방법은

runs = list() 
for (i in 1:30) { runs[[i]] = read.csv(paste("run", i-1, ".csv")); } 
이제

의 추가 목록에 저장이 데이터 프레임 각각 동일한 열 레이아웃을 가지고 있으며, 나는 "X"로 식별 된 컬럼에 관심이 있다는 것을 가정 해 봅시다이다 "y"로 식별되는 열

30 개 실행 (x, y) 쌍을 모두 그릴 수있는 가장 쉬운 방법은 무엇입니까? 여기에 내가 현재 그것을 할 것입니다 방법은 (내가 더 좋은 방법이 있어야 느낌) :

xList = list() 
yList = list() 
for (i in 1:30) { xList[[i]] = runs[[i]]$x; yList[[i]] = runs[[i]]$y; } 
matplot(x=as.data.frame(xList), y=as.data.frame(yList)) 

이 더욱 나는 데이터를 변환 할 노력하고있어 때 고통스러운 얻는다; 목록에 저장된 각 데이터 프레임의 특정 열에 함수를 적용하는 방법을 이해할 수 없습니다.

여기의 도움은 매우 도움이 될 것입니다.

답변

3

이와 같은 목록을 처리 할 때는 l * ply 함수 (plyr)를 사용하거나 lapply를 사용하는 것이 가장 좋습니다.

library(plyr) 
runs <- llply(paste("run",1:30,".csv",sep=""), read.csv) 

여기를 음모 한 방법 :

가져 오기를 수행하는 가장 쉬운 방법은 아마도과 같이 당신 다른 장치에이 출력도 할 수있는, 물론

# some dummy data 
runs <- list(a=data.frame(x=1:5, y=rnorm(5)), b=data.frame(x=1:5, y=rnorm(5))) 
par(mfrow=c((length(runs)/2),2)); 
l_ply(1:length(runs), function(i) { plot(runs[[i]]$x, runs[[i]]$y) }) 

(예 : pdf) par()을 사용하지 마십시오.

+1

실행 <- llply (붙여 넣기 ("실행", 1 : 30 ". CSV"9 월을 = ""), 읽어 보시기 바랍니다. csv)는 매우 매끄 럽습니다. 플라이어를 포함하고 싶지 않은 경우에는 lapply와 함께 작동합니다. 브라보 – I82Much

5

모든 데이터가 포함 된 데이터 프레임을 개 만드는 것이 훨씬 나을 것입니다. 예를 들어, 가져올 때 실행 번호 (runs[[i]] = data.frame(read.csv(paste("run", i-1, ".csv")), Run=i))를 입력 한 다음 alldata <- do.call(rbind, runs)을 입력하십시오.

이제 lattice 또는 ggplot2을 사용하여 플롯을 만들 수 있습니다. 예를 들어 모든 산점도가 실행에 의해 서로 다른 색상을 사용하여 실행 얻기 위해 수행

library(ggplot2) 
qplot(x, y, colour=Run, data=alldata, geom="point")