2016-10-03 6 views
0

CRP 수준 (CRP_0 - CRP_10)의 시간 경과에 따른 샘플 (Age_0 - Age_10) 인 4 명의 환자 (PatientID)에 대해 x-y 선 그래프를 생성하고 싶습니다.각 Y 값마다 X 값이 다른 X-Y 선 그래프 표시

PatientID Age_0 Age_1 Age_2 Age_3 Age_4 Age_5 Age_6 Age_7 Age_8 Age_9 Age_10 CRP_0 CRP_1 CRP_2 CRP_3 CRP_4 CRP_5 CRP_6 CRP_7 CRP_8 CRP_9 CRP_10 
1 22 24 24 28 30 31 0 0 0 0 0 3 9 2 1 0 1 0 0 0 0 0 
3 27 28 29 32 33 35 0 0 0 0 0 2 10 2 1.2 0.1 0 0 0 0 0 0 
4 37 38 39 40 42 43 44 45 0 0 0 8 0 7 7 0 0 7 2 0 0 0 
5 33 35 36 38 39 40 41 0 0 0 0 2 2 5 0.2 0 0 0 0 0 0 0 

structure(list(PatientID = c(1L, 3L, 4L, 5L), Age_0 = c(22L, 
27L, 37L, 33L), Age_1 = c(24L, 28L, 38L, 35L), Age_2 = c(24L, 
29L, 39L, 36L), Age_3 = c(28L, 32L, 40L, 38L), Age_4 = c(30L, 
33L, 42L, 39L), Age_5 = c(31L, 35L, 43L, 40L), Age_6 = c(0L, 
0L, 44L, 41L), Age_7 = c(0L, 0L, 45L, 0L), Age_8 = c(0L, 0L, 
0L, 0L), Age_9 = c(0L, 0L, 0L, 0L), Age_10 = c(0L, 0L, 0L, 0L 
), CRP_0 = c(3L, 2L, 8L, 2L), CRP_1 = c(9L, 10L, 0L, 2L), CRP_2 = c(2L, 
2L, 7L, 5L), CRP_3 = c(1, 1.2, 7, 0.2), CRP_4 = c(0, 0.1, 0, 
0), CRP_5 = c(1L, 0L, 0L, 0L), CRP_6 = c(0L, 0L, 7L, 0L), CRP_7 = c(0L, 
0L, 2L, 0L), CRP_8 = c(0L, 0L, 0L, 0L), CRP_9 = c(0L, 0L, 0L, 
0L), CRP_10 = c(0L, 0L, 0L, 0L)), .Names = c("PatientID", "Age_0", 
"Age_1", "Age_2", "Age_3", "Age_4", "Age_5", "Age_6", "Age_7", 
"Age_8", "Age_9", "Age_10", "CRP_0", "CRP_1", "CRP_2", "CRP_3", 
"CRP_4", "CRP_5", "CRP_6", "CRP_7", "CRP_8", "CRP_9", "CRP_10" 
), class = "data.frame", row.names = c(NA, -4L)) 

그래서 X가 Age이고 Y가 CRP 인 선 그래프를 플로팅하고 싶습니다. 예를 들어 Age_0과 CRP_0은 각 PatientID에 대해 하나의 데이터 포인트입니다. 당신이 나를 도울 수 있다면

enter image description here

내가 드리겠습니다 그런 다음, 두 번째 데이터 포인트는 마지막에 CRP_1 등 대 Age_1, 나는이 같은 플롯 뭔가를하고 싶습니다 . 고맙습니다.

+1

당신을 해결할 수 없다 ;-) – agenis

+0

"0"값은 실제로 우리가 호출 할 수있는 값이나 NA 값이 없다는 것을 잊었다. – Lothlorian

+1

'plot (data $ CRP_0, data $ Age_0, type = "l")'을 처음으로 플롯 한 다음 다른 값들에 대해 라인들로 반복합니다 :'lines (data $ CRP_1, data $ Age_1)' – Choubi

답변

2

(나는 아마 가장 효율적인 방법이 아니다 있다고 생각하지만) 당신은 다음과 같이 할 수 있습니다 : 여기

library(ggplot2); library(reshape2): library(dplyr) 
d1=df %>% select(matches("Age|PatientID")) %>% melt(id.vars=1, value.name="Age") %>% select(-variable) 
d2=df %>% select(matches("CRP|PatientID")) %>% melt(id.vars=1, value.name="CRP") %>% select(-variable, -PatientID) 
toplot = cbind(d1, d2) %>% arrange(PatientID, Age) %>% mutate(PatientID=factor(PatientID)) 
ggplot(toplot[toplot$Age!=0,]) + aes(x=Age, y=CRP, color=PatientID) + geom_point(pch=15, size=4) + geom_line(size=1.5) + coord_cartesian(xlim=c(0, 50)) + xlab("Time") 

내가 Age=0로 포인트 값을 누락 것으로 가정하지만, null 이외의 나이 점 CRP=0은 유효한 포인트입니다.

enter image description here

+0

고맙습니다. 정확히 내가 무엇을 찾고 있었는지. 나는 지금 그것을 시험 할 것이다. 건배. – Lothlorian

+0

@ 바티 오케이! 어떤 답이 귀하의 PB를 해결하면, 다른 사람들이 그것이 해결 된 것을 볼 수 있도록 허용으로 표시 할 수 있습니다. 우리에게 알려주지 않으면 – agenis

+0

나는 아래 명령과 Sotos '하나를 최적화하고 아름답게 일했습니다. 당신의 도움을 주셔서 대단히 감사합니다. 정말 고맙습니다. – Lothlorian

2

난 당신이 제공하는 이미지를 볼 수 있지만 여기에 생각이 없다, 당신은 당신이 시도하는지 설명 어디에 문제가있는 경우 문제는 더 나은 수신 일반적으로

df1 <- data.frame(PatientID = df$PatientID, age = stack(df[,grep('Age', names(df))])[,1], 
        CRP = stack(df[,grep('CRP', names(df))])[,1], stringsAsFactors = FALSE) 

head(df1) 
# PatientID age CRP 
#1   1 22 3 
#2   3 27 2 
#3   4 37 8 
#4   5 33 2 
#5   1 24 9 
#6   3 28 10 

#converting PatientID to factor, 
df1$PatientID <- as.factor(df1$PatientID) 

#Plot, 

library(ggplot2) 
ggplot(df1, aes(x = age, y = CRP, color = PatientID))+geom_line() 
+0

그것은 agenis 예제에 대한 좋은 대안 인 것 같습니다. 둘 다 시험해보고 다시 알려 드리겠습니다. Sotos 대단히 감사합니다. 도와 주셔서 감사합니다. 최고의, Bahti – Lothlorian

관련 문제