Используя следующий фреймворк данных, я хотел бы сгруппировать данные по репликации и группе, а затем рассчитать отношение значений обработки к управляющим значениям.Вычисление коэффициентов по группам с 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
.
Спасибо.
не группировать по группам – eddi