2014-01-27 6 views
1

У меня возникла проблема с набором данных, который имеет уровни перекрывающихся уровней.Как бороться с перекрывающимися уровнями факторов? (например, при создании таблиц и графиков)

Я хотел бы производить временные рамки, штрих-кодов и статистику по уровню фактора - однако, я хочу, чтобы уровни факторов были двусмысленными. Это означает, что наблюдения, относящиеся к более чем одному уровню, должны появляться несколько раз в сюжете.

Вот пример того, как моя структура данных выглядит следующим образом:

head <- c("ID","YEAR","BRAZIL","GERMANY","US","FRANCE") 
data <- data.frame(matrix(c(1,2000,1,0,0,0, 
          2,2010,0,1,1,0, 
          3,2011,0,1,0,0, 
          4,2012,1,0,0,1, 
          5,2012,0,1,0,0, 
          6,2013,0,0,0,1), 
         nrow=6, ncol=6, byrow=T)) 
names(data) <- head 

Obiously, возможный переменный фактор "COUNTRY" не может быть создан обычным способом. Это заставит уровни фактора быть четкие (в нашем случае будет 4 уровня: Бразилия, Германия, США и Франция):

data$COUNTRY[data$BRAZIL==1 & 
      data$GERMANY==0 & 
      data$US==0 & 
      data$FRANCE==0] <- "Brazil" 
data$COUNTRY[data$BRAZIL==0 & 
      data$GERMANY==1 & 
      data$US==0 & 
      data$FRANCE==0] <- "Germany" 

и т.д ...

factor(data$COUNTRY) 

Но это не то, что я хочу ...


Моя проблема заключается в том, что черчения фактором работает только тогда, когда уровни фактора являются правильно unambigu ОЕ. Я хотел бы, чтобы произвести что-то вроде этого:

require(ggplot2) 
MYPLOT <- qplot(data$YEAR, data$COUNTRY) 
MYPLOT + geom_point(aes(size=..count..), stat="bin") + scale_size(range=c(0, 15)) 

с наблюдениями, принадлежащих к я уровней фактора появляется я раз в сюжете.

  • Как преобразовать данные data.frame, чтобы получить то, что я хочу?
  • Должен ли я просто дублировать эти наблюдения, относящиеся к i Уровни факторов i раз? Если да, как мне это сделать?
  • Это обходное решение, которое не требует дублирования случаев?

Идеи кто-нибудь?

+2

Используйте 'stat = 'identity'' в своем заговоре. Если это не так, пожалуйста, уточните, как вы определяете столбец «COUNTRY», поскольку для меня это совершенно неясно. – Justin

+0

Я отредактировал мой вопрос. Теперь должно быть ясно, что я имел в виду с возможной переменной фактора «СТРАНА». 'stat = 'identity'' не то, что я хочу, я хочу' stat =' bin''. –

+0

для того, что это стоит, пакет 'решетка 'имеет тип понятия/объекта, называемый * shingles *, которые явно предназначены для реализации перекрывающихся классов (это одна из интересных особенностей решетки, которая не попала в ggplot): http://stackoverflow.com/questions/5199128/can-i-use-shingles-from-lattice-in-ggplot2-in-r –

ответ

1

Думаю, вам нужно дублировать эти строки, чтобы представлять каждое наблюдение. и удалите их с помощью 0.

library(reshape2) 
d2<-melt(data, id.var=c("ID","YEAR")) 
d3<-d2[d2$value!=0,] 
library(ggplot2) 
qplot(d3$YEAR, d3$variable) 
+0

Спасибо, это решило проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^