Subconjunto y ggplot2

Tengo un problema para trazar un subconjunto de un dataframe con ggplot2. Mi df es como:

ID Value1 Value2 P1 100 12 P1 120 13 ... P2 300 11 P2 400 16 ... P3 130 15 P3 140 12 ... 

¿Cómo puedo ahora trazar Value1 vs Value2 solo para IDs P1 y P3? Por ejemplo, intenté:

 ggplot(subset(df,ID=="P1 & P3") + geom_line(aes(Value1, Value2, group=ID, colour=ID))) 

pero siempre recibo un error

ps También probé muchas combinaciones con P1 y P3 pero siempre fallé …

Aquí 2 opciones para subconjuntos:

Usando un subset desde la base R:

 library(ggplot2) ggplot(subset(dat,ID %in% c("P1" , "P3"))) + geom_line(aes(Value1, Value2, group=ID, colour=ID)) 

Usando subset el argumento de geom_line (Nota, estoy usando el paquete plyr para usar la función especial . )

 library(plyr) ggplot(data=dat)+ geom_line(aes(Value1, Value2, group=ID, colour=ID), ,subset = .(ID %in% c("P1" , "P3"))) 

También puede usar el subconjunto complementario:

 subset(dat,ID != "P2") 

¿Estás buscando la siguiente ttwig?

 library(ggplot2) l<-df[df$ID %in% c("P1","P3"),] myplot<-ggplot(l)+geom_line(aes(Value1, Value2, group=ID, colour=ID)) 

enter image description here

Hay otra solución que encuentro útil, especialmente cuando quiero trazar múltiples subconjuntos del mismo objeto:

 myplot<-ggplot(df)+geom_line(aes(Value1, Value2, group=ID, colour=ID)) myplot %+% subset(df, ID %in% c("P1","P3")) myplot %+% subset(df, ID %in% c("P2")) 

Tu formulación es casi correcta. Usted quiere:

 subset(dat, ID=="P1" | ID=="P3") 

Donde el | (‘tubería’) significa ‘o’. Su solución, ID=="P1 & P3" , está buscando un caso donde ID es literalmente "P1 & P3"

Con la opción 2 en la respuesta de @ agstudy ahora obsoleta, la definición de datos con una función puede ser útil.

 library(plyr) ggplot(data=dat) + geom_line(aes(Value1, Value2, group=ID, colour=ID), data=function(x){x$ID %in% c("P1", "P3")) 

Este enfoque es útil si desea reutilizar un conjunto de datos en el mismo gráfico, por ejemplo, no desea especificar una nueva columna en el data.frame, o si desea trazar explícitamente un conjunto de datos en una capa sobre el otro .:

 library(plyr) ggplot(data=dat, aes(Value1, Value2, group=ID, colour=ID)) + geom_line(data=function(x){x[!x$ID %in% c("P1", "P3"), ]}, alpha=0.5) + geom_line(data=function(x){x[x$ID %in% c("P1", "P3"), ]}) 

Intente filtrar para subconjuntar solo las filas de P1 y P3

 df2 <- filter(df, ID == "P1" | ID == "P3") 

De lo que puedes trazar Value1. vs Value2.