2010-01-14 2 views
17

데이터 프레임을 사용해야합니까 출력의 형식은 :나는 항상 내가 몬테 - 카를로 시뮬레이션을 실행하는거야 ggplot2

> d = data.frame(iter=seq(1, 2), k1 = c(0.2, 0.6), k2=c(0.3, 0.4)) 
> d 
iter k1 k2 
1  0.2 0.3 
2  0.6 0.4 

내가 생성 할 플롯은 다음과 같습니다

plot(d$iter, d$k1) 
plot(density(d$k1)) 

나는, ggplot2를 사용하여 해당 플롯을

new_d = data.frame(iter=rep(d$iter, 2), 
        k = c(d$k1, d$k2), 
        label = rep(c('k1', 'k2'), each=2)) 

다음 플로팅가 쉽게 데이터 프레임으로 변환하는 방법을 알고있다. 그러나 반복의 수는 매우 클 수 있으며 k의 수 또한 클 수 있습니다. 이는 매우 큰 데이터 프레임을 망친다는 뜻입니다.

어쨌든 나는이 새로운 데이터 프레임을 만드는 것을 피할 수 있습니까?

감사

답변

13

짧은 대답은 "아니요"이므로 데이터 프레임을 만들 수 없습니다. ggplot은 데이터가 데이터 프레임에 있어야합니다. qplot을 사용하는 경우 x 및 y에 대해 별도의 벡터를 지정할 수 있지만 전달하는 매개 변수에서 내부적으로 데이터 프레임이 생성됩니다.

나는 쥬바의 제안에 동의합니다. reshape 함수를 사용하는 방법에 대해 알아 봅니다. , 또는 더 나은 아직 melt/cast 기능을 가진 reshape 패키지. 데이터를 긴 형식으로 저장하면 빠른 ggplot 그래프를 만드는 것이 한 걸음 더 가까워집니다!

4

당신은 "긴"형식으로 데이터 프레임을 변환 할 수 reshape 기능을 사용할 수 있습니다. 코드보다 조금 빠를 수도 있습니까?

R> reshape(d, direction="long",varying=list(c("k1","k2")),v.names="k",times=c("k1","k2")) 
    iter time k id 
1.k1 1 k1 0.2 1 
2.k1 2 k1 0.6 2 
1.k2 1 k2 0.3 1 
2.k2 2 k2 0.4 2 
2

그냥 이전 답변에 추가하십시오. qplot을 사용하면 할 수 있습니다

p <- qplot(y=d$k2, x=d$k1) 

그런 다음 거기에서 더 빌드합니다.

p + theme_bw() 

하지만 동의합니다 - 용융물/캐스트는 일반적인 방법입니다.

관련 문제