Подтвердить что ты не робот

Подмножество и ggplot2

У меня проблема с построением подмножества кадра данных с ggplot2. Мой df похож:

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

Как мне теперь построить Value1 vs Value2 только для идентификаторов P1 и P3? Например, я попробовал:

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

но я всегда получаю сообщение об ошибке.

p.s. Я также пробовал много сочетаний с P1 и P3, но я всегда терпел неудачу.

4b9b3361

Ответ 1

Здесь 2 варианта подмножества:

Используя subset из базы R:

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

Используя subset аргумент geom_line (Примечание. Я использую пакет plyr для использования специальной функции .).

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

Вы также можете использовать дополнительное подмножество:

subset(dat,ID != "P2")

Ответ 2

Есть другое решение, которое я считаю полезным, особенно когда я хочу построить несколько подмножеств одного и того же объекта:

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

Ответ 3

Вы ищете следующий график:

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

Ответ 4

Ответ @agstudy не работал для меня с последней версией ggplot2, но это maggritr с использованием maggritr:

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

Это работает, потому что, если geom_line видит, что data являются функцией, он вызывает эту функцию с унаследованной версией data и использует выходные данные этой функции в качестве data.

Ответ 5

С опцией 2 в @agstudy ответ теперь устарел, определение данных с помощью функции может быть удобно.

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

Этот подход пригодится, если вы хотите повторно использовать набор данных в том же сюжете, например. вы не хотите указывать новый столбец в data.frame или хотите явно построить один набор данных в слое над другим.:

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

Ответ 6

Ваша формулировка почти правильна. Вы хотите:

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

Где | ('pipe') означает 'или'. Ваше решение, ID=="P1 & P3", ищет случай, когда идентификатор буквально "P1 & P3"

Ответ 7

Попробуйте фильтр для подмножества только строк P1 и P3

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

Чем может быть график Value1. vs Value2.

Ответ 8

Вы можете сначала отфильтровать данные, а затем ggplot:

df %>% filter(ID == P1 & ID ==P3)%>% ggplot(geom_line(aes(Value1, Value2, group=ID, colour=ID)))

Или же

'ggplot (data = subset (df, ID == "P1" | ID == "P2") + aes (Value1, Value2, group = ID, цвет = ID) + geom_line()'