2014-10-16 2 views
0

(C는 열임) : 모든 유사 C1 및 C2에 대한 C4 대 C2 및 모든 유사 C2에 대한 C4 대 C1 대 C4 C문제의 데이터 프레임은 다음과 같습니다R- 데이터 프레임의 열 값을 기반으로하는 데이터의 서브 세트 라인

C1   C2 C3 C4 
1 2012-12-28 0 NA 10773 
2 2012-12-28 5 NA 34112 
3 2012-12-28 10 NA 30901 
4 2012-12-28 0 NA 12421 
5 2012-12-30 0 NA 3925 
6 2012-12-30 5 NA 17436 
7 2012-12-30 10 NA 13717 
8 2012-12-30 15 NA 36708 
9 2012-12-30 20 NA 28408 
10 2012-12-30 NA NA 2880 
11 2013-01-02 0 -13.89 9972 
12 2013-01-02 5 -13.89 10576 
13 2013-01-02 10 -13.89 33280 
14 2013-01-02 15 -13.89 28667 
15 2013-01-02 20 -13.89 21104 
16 2013-01-02 25 -13.89 24771 
17 2013-01-02 NA NA 22 
18 2013-01-05 0 -3.80 20727 
19 2013-01-05 5 -3.80 2033 
20 2013-01-05 10 -3.80 16045 
21 2013-01-05 15 -3.80 12074 
22 2013-01-05 20 -3.80 10095 
23 2013-01-05 NA NA 32693 
24 2013-01-08 0 -1.70 19579 
25 2013-01-08 5 -1.70 20200 
26 2013-01-08 10 -1.70 12263 
27 2013-01-08 15 -1.70 28797 
28 2013-01-08 20 -1.70 23963 
29 2013-01-11 0 -2.30 26525 
30 2013-01-11 5 -2.30 21472 
31 2013-01-11 10 -2.30 9633 
32 2013-01-11 15 -2.30 27849 
33 2013-01-11 20 -2.30 23950 
34 2013-01-17 0 1.40 16271 
35 2013-01-17 5 1.40 18581 
36 2013-01-19 0 0.10 5910 
37 2013-01-19 5 0.10 16890 
38 2013-01-19 10 0.10 13078 
39 2013-01-19 NA NA 55 
40 2013-01-23 0 -9.20 15048 
41 2013-01-23 6 -9.20 20792 
42 2013-01-26 0 NA 21649 
43 2013-01-26 6 NA 24655 
44 2013-01-29 0 0.10 9100 
45 2013-01-29 5 0.10 27514 
46 2013-01-29 10 0.10 19392 
47 2013-01-29 15 0.10 21720 
48 2013-01-29 NA 0.10 112 
49 2013-02-11 0 0.40 13619 
50 2013-02-11 5 0.40 2748 
51 2013-02-11 10 0.40 1290 
52 2013-02-11 15 0.40 762 
53 2013-02-11 20 0.40 1125 
54 2013-02-11 25 0.40 1709 
55 2013-02-11 30 0.40 29459 
56 2013-02-11 35 0.40 106474 
57 2013-02-13 0 1.30 3355 
58 2013-02-13 5 1.30 970 
59 2013-02-13 10 1.30 2240 
60 2013-02-13 15 1.30 35871 
61 2013-02-18 0 -0.60 8564 
62 2013-02-20 0 -1.20 12399 
63 2013-02-26 0 0.30 2985 
64 2013-02-26 5 0.30 9891 
65 2013-03-01 0 0.90 5221 
66 2013-03-01 5 0.90 9736 
67 2013-03-05 0 0.60 3192 
68 2013-03-05 5 0.60 4243 
69 2013-03-09 0 0.10 45138 
70 2013-03-09 5 0.10 55534 
71 2013-03-12 0 1.40 7278 
72 2013-03-12 NA NA 45 
73 2013-03-15 0 0.30 2447 
74 2013-03-15 5 0.30 2690 
75 2013-03-18 0 -2.30 3008 
76 2013-03-22 0 -0.90 11411 
77 2013-03-22 5 -0.90 NA 
78 2013-03-22 10 -0.90 17675 
79 2013-03-22 NA NA 47 
80 2013-03-25 0 1.20 9802 
81 2013-03-25 5 1.20 15790 

시계열 subseting 및 병합/일치/붙여 넣기 subseting 여기에 대해 다른 게시물이 있지만, 나는 내가 그 지시 사항을 따르려고 점을 놓칠 생각합니다.

마지막 목표는 C1C4의 플롯을 각각 C2 = 0C2 = 5 등으로 사용하는 것입니다. C4에 대해서도 C2과 동일 할 때마다 동일하게 C1입니다. 중복 된 C1과 C2가 있지만 그 값에 대한 C4가 평균화 될 수 있음을 압니다. 이 그림을 그림으로 그릴 수 있습니다.이 방법으로 데이터를 부분 집합하는 방법을 알아야합니다. 아마도 이러한 하위 집합으로 새로운 data.frame()을 만드는 것이 가장 쉽습니다. 미리 감사드립니다.

답변

1

ggplot2을 사용하여 부분 집합을 그리는 것이 비교적 쉽습니다. 먼저 데이터를 "넓은"형식에서 "긴"형식으로 바꿔 가능한 값이 C4C5 인 새로운 범주 형 변수를 만들어야합니다.

library(reshape2) 
library(ggplot2) 

# Starting with the data you posted in a data frame called "dat": 

# Convert C2 to date format 
dat$C2 = as.Date(dat$C2) 

# Reshape data to long format 
dat.m = melt(dat, id.var=c("C1","C2","C3")) 

# Plot values of C4 and C5 vs. C2 with separate lines for each level of C3 
ggplot(dat.m, aes(x=C2, y=value, group=C3, colour=as.factor(C3))) + 
    geom_line() + geom_point() + 
    facet_grid(variable ~ ., scales="free_y") 

C4 라인

C3는 모든 레벨에 대해 동일하므로 모두는 서로 중첩된다.

enter image description here

는 또한 C3의 각 수준에 대해 별도의 패널을 가질 수 있습니다

ggplot(dat.m, aes(x=C2, y=value, group=variable, colour=variable)) + 
    geom_line() + geom_point() + 
    facet_grid(variable ~ C3, scales="free_y") + 
    theme(axis.text.x=element_text(angle=-90)) + 
    guides(colour=FALSE) 

enter image description here

여기에 별도의 플롯을 얻기에 기본 그래픽 방법입니다. 아래에서 새 열 이름을 사용하고 있습니다.

# Use lapply to create a separate plot for each level of C2 
lapply(na.omit(unique(dat$C2)), function(x) { 

    # The next line of code removes NA values so that there will be a line through 
    # every point. You can remove this line if you don't care whether all points 
    # are connected or not. 
    dat = dat[complete.cases(dat[,c("C1","C2","C4")]),] 

    # Create a plot of C4 vs. C1 for the current value of C2  
    plot(dat$C1[dat$C2==x], dat$C4[dat$C2==x], 
     type="o", pch=16, 
     xlab=paste0("C2=",x), ylab="C4") 
}) 
+0

감사 eipi10. 솔루션을 구현하는 데 어려움을 겪고 있습니다. 나는 C1이 실제로 색인 일 뿐이라는 것을 반영하기 위해 데이터를 편집했습니다. 따라서 복사/붙여 넣기만큼 간단하지 않으며 어쨌든 문제가 발생합니다. 또한 각 플롯을 개별적으로 조작 할 수 있기를 기대합니다. 따라서 기본 R (R 기본 패키지) 솔루션이 더 잘 맞을 것입니다 (플러스로 이해하는 것이 더 쉬울 수도 있습니다!). 감사합니다 – James

+0

내 솔루션에서'C1'을 전혀 사용하지 않으므로 결과에 아무런 영향이 없어야합니다. 당신은 당신이 가지고있는 문제에 대해 더 구체적으로 말할 수 있습니까? – eipi10

+0

예! 나는 코드의 각 단계를 이해하기를 원하며 당신의 이해에 어려움을 겪고있다. melt(), aes()는 새로운 기능입니다. 그렇지 않으면, 나는 당신의 솔루션에'C1'을 보았고, 내가 필요로하는 것을 정확히 반영하도록 그것을 바꾸려고 시도하는 것이 그렇게 잘되지 않는 것처럼 보입니다. dat.m data.frame은 또한 내 'C4'를 가져 와서 변수 "C4"의 두 열을 내리고 값을 한 열 이상 올렸습니다. 희망이 도움이됩니다. 원래 게시물을 편집 한 것처럼 맞을 수도 있습니다. – James