2015-02-12 3 views
2

Используя следующий фреймворк данных, я хотел бы сгруппировать данные по репликации и группе, а затем рассчитать отношение значений обработки к управляющим значениям.Вычисление коэффициентов по группам с dplyr

structure(list(group = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L), .Label = c("case", "controls"), class = "factor"), treatment = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "EPA", class = "factor"), 
    replicate = structure(c(2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L), .Label = c("four", 
    "one", "three", "two"), class = "factor"), fatty_acid_family = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "saturated", class = "factor"), 
    fatty_acid = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "14:0", class = "factor"), 
    quant = c(6.16, 6.415, 4.02, 4.05, 4.62, 4.435, 3.755, 3.755 
    )), .Names = c("group", "treatment", "replicate", "fatty_acid_family", 
"fatty_acid", "quant"), class = "data.frame", row.names = c(NA, 
-8L)) 

Я попытался с помощью dplyr следующим образом:

group_by(dataIn, replicate, group) %>% transmute(ratio = quant[group=="case"]/quant[group=="controls"]) 

, но это приводит к Error: incompatible size (%d), expecting %d (the group size) or 1

Первоначально я думал, что это может быть потому, что я пытался создать 4 отношения с ФР 8 рядов и поэтому я думал, что summarise может быть ответом (сворачивание каждой группы на одно соотношение), но это тоже не сработает (мое понимание является недостатком).

group_by(dataIn, replicate, group) %>% summarise(ratio = quant[group=="case"]/quant[group=="controls"]) 

    replicate group ratio 
1  four  case NA 
2  four controls NA 
3  one  case NA 
4  one controls NA 
5  three  case NA 
6  three controls NA 
7  two  case NA 
8  two controls NA 

Я был бы признателен за несколько советов о том, где я буду неправильно, или даже если это может быть сделано с dplyr.

Спасибо.

+2

не группировать по группам – eddi

ответ

4

Вы можете попробовать:

group_by(dataIn, replicate) %>% 
    summarise(ratio = quant[group=="case"]/quant[group=="controls"]) 
#Source: local data frame [4 x 2] 
# 
# replicate ratio 
#1  four 1.078562 
#2  one 1.333333 
#3  three 1.070573 
#4  two 1.446449 

Поскольку вы сгруппированы по репликации и группы, вы не могли получить доступ к данным из разных групп одновременно.

+1

Спасибо, работает как шарм. Я думаю, что понимаю проблему «группы», но мне нужно будет сыграть с dplyr и снова прочитать документы. – duff

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