2017-02-07 2 views
1

У меня есть DF, который выглядит как:R: участок несколько кривых против один вар, но для 4 факторов

id  app vac dac 
1: 1 1000802 579 455 
2: 1 1000803 1284 918 
3: 1 1000807 68 66 
4: 1 1000809 1470 903 
5: 2 1000802 407 188 
6: 2 1000803 365 364 
7: 2 1000807 938 116 
8: 2 1000809 699 570 

Мне нужно построить vac и dac для каждого app на одном холсте как функция id. Я знаю, как это сделать только для одного app, используя melt и объемный участок с ggplot. Но я застрял, как это сделать для произвольного количества факторов/уровней.

В этом примере будет всего 8 кривых для 4 app. Есть предположения? Вот кадр данных для тестов. Спасибо!!

df = structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), app = c(1000802, 
                   1000803, 1000807, 1000809, 1000802, 1000803, 1000807, 1000809 
), vac = c(579, 1284, 68, 1470, 407, 365, 938, 699), dac = c(455, 
                  918, 66, 903, 188, 364, 116, 570)), .Names = c("id", "app", "vac", 
                              "dac"), class = c("data.table", "data.frame"), row.names = c(NA, 
                                             -8L)) 

Edit: некоторые разъяснения по осям, x ось = id, y ось = значения vac и dac для каждого из 4 app факторов

ответ

2

Немного непонятно, что вы ищете, но если вы ищете линию, соединяющую значения vac и dac, здесь используется решение с использованием dplyr и tidyr.

Во-первых, gather в vac и dac колонны (это похоже на reshape2::melt, но с синтаксисом, я считаю, легче следовать). Затем установите variable (который имеет «VAC» и «КОР») как ваши рентгеновские места, то value (от старых vac и dac столбцов) в качестве у, а затем карты app и id к эстетике (здесь, color и linetype). Установите group, чтобы убедиться, что он соединяет правильные пары точек, а также добавить geom_line:

df %>% 
    gather(variable, value, vac, dac) %>% 
    ggplot(aes(x = variable 
      , y = value 
      , color = factor(app) 
      , linetype = factor(id) 
      , group = paste(app, id))) + 
    geom_line() 

дает

enter image description here

Учитывая вопрос редактирования, вы можете изменить ось следующим образом:

df %>% 
    gather(variable, value, vac, dac) %>% 
    ggplot(aes(x = id 
      , y = value 
      , color = factor(app) 
      , linetype = variable 
      , group = paste(app, variable))) + 
    geom_line() 

дает

enter image description here

+0

2-е решение - именно то, что я искал. Отлично! Большое спасибо! –

1

Я не уверен, я понял ваш вопрос, но я хотел бы сделать что-то вроде

ggplot(df,aes(vac,app,group=app)) + geom_point(aes(color=factor(app))) 
+0

Не совсем это, но спасибо. 'x' axis =' id', 'y' axis = значения' vac' и 'dac' для каждого из 4 факторов' app' –

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