Subconjunto e ggplot2

Eu tenho um problema para traçar um subconjunto de um quadro de dados com ggplot2. Meu df é como:

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

Como posso agora traçar valor1 vs valor2 apenas para IDs P1 e P3? Por exemplo eu tentei:

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

mas eu sempre recebo um erro.

ps Eu também tentei muitas combinações com P1 e P3, mas eu sempre falhei ..

Aqui 2 opções para subconjuntos:

Usando o subset da base R:

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

Usando subset o argumento da geom_line (Note que estou usando o pacote plyr para usar a function especial . ).

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

Você também pode usar o subconjunto complementar:

 subset(dat,ID != "P2") 

Você está procurando o seguinte enredo:

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

insira a descrição da imagem aqui

Há outra solução que acho útil, especialmente quando quero plotar vários subconjuntos do mesmo object:

 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")) 

Sua formulação está quase correta. Você quer:

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

Onde o | (‘pipe’) significa ‘ou’. Sua solução, ID=="P1 & P3" , está procurando um caso em que o ID é literalmente "P1 & P3"

Com a opção 2 na resposta do @ agstudy agora obsoleta, a definição de dados com uma function pode 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")) 

Essa abordagem é útil se você quiser reutilizar um dataset no mesmo gráfico, por exemplo, se você não quiser especificar uma nova coluna no data.frame ou se quiser explicitamente plotar um dataset em uma camada acima do outro:

 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"), ]}) 

Tente filtrar para subconjunto apenas as linhas de P1 e P3

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

Do que você pode traçar Valor1. vs Value2.