Я пытался решить проблему с вопросами здесь, на SO, но я не мог найти удовлетворительный ответ.Мой фрейм данных имеет структуру
X = data_frame(
treat = c(rep(1,4), rep(2,4), rep(3,4), rep(4,4)),
id = seq(1:16),
x = rnorm(16),
y = rnorm(16),
z = rnorm(16)
)
Похоже
# A tibble: 16 x 5
treat id x y z
<int> <int> <dbl> <dbl> <dbl>
1 1 1 -0.0724 1.26 0.317
2 1 2 -0.486 -0.628 0.392
3 1 3 -0.406 -0.706 1.18
4 1 4 -1.35 -1.27 2.36
5 2 5 -0.0751 -0.0394 0.568
6 2 6 0.243 0.873 0.132
7 2 7 0.138 0.611 -0.700
8 2 8 -0.732 1.02 -0.811
9 3 9 -0.0278 1.78 0.568
10 3 10 0.526 1.18 1.03
11 3 11 1.43 0.0937 -0.0825
12 3 12 -0.299 -0.117 0.367
13 4 13 1.05 2.04 0.678
14 4 14 -1.93 0.201 0.250
15 4 15 0.624 1.09 0.852
16 4 16 0.502 0.119 -0.843
Каждое четвертое значение в treat
является контрольной, и теперь я хочу вычислить разницу в x
, y
и z
между обработками и контролем.Например, я хотел бы рассчитать для первой процедуры
-0.724 - (-1.35) #x
1.26 - (-1.27) #y
0.317 - 2.36 #z
для первой процедуры.Для второй процедуры, соответственно,
-0.486 - (-1.35) #x
-0.628 - (-1.27) #y
0.392 - 2.36 #z
... и т. Д.
Я хотел бы использовать решение dplyr
/ tidyverse
, но не знаю, как это сделать.что "гладко".Я уже нашел решение с помощью объединений, но оно кажется довольно утомительным по сравнению с «гладким» решением, которое обычно предлагает 1021