У меня есть тиббл в этом формате:
position condition replicate value
<dbl> <chr> <chr> <dbl>
1 10 1 a 0.16
2 10 1 b 0.21
3 10 2 a 0.19
4 10 2 b 0.38
5 10 3 a 0.12
6 10 3 b 0.35
7 20 1 a 0.22
8 20 1 b 0.24
9 20 2 a 0.56
10 20 2 b 0.47
11 20 3 a 0.14
12 20 3 b 0.23
...
Из этого я хочу получить различия между всеми парами повторений для пары условий на позицию:
position 1.a-2.a 1.a-2.b 1.b-2.a 1.b-2.b 1.a-3.a 1.a-3.b 1.b-3.a 1.b-3.b ...
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 10 0.13 0.21 0.13 0.16 ... ... ... ...
2 20 ... ... ... ... ... ... ... ...
3 30 ... ... ... ... ... ... ... ...
...
И затем суммируйте, чтобы получить медиану для пары условий на позицию:
position median(abs(1.a-2.a), abs(1.a-2.b), abs(1.b-2.a), abs(1.b-2.b)) ...
<dbl> <dbl>
1 10 0.0161
2 20 ...
3 30 ...
...
Я пытался table %>% spread(replicate, value)
разбить повторяющиеся значения на столбцы, но я не знаю, откуда go оттуда , Мне нужно сделать решение обобщаемым, так как я не знаю, сколько у меня будет условий или повторов. Как я могу достичь этого?
РЕДАКТИРОВАТЬ:
Примерно так:
table %>%
unite(condition.replicate, c(condition, replicate), sep = ".") %>%
spread(condition.replicate, value) %>% group_by(position) %>%
uncount(2)
Дает мне это:
position `1.a` `1.b` `2.a` `2.b` ...
<dbl> <dbl> <dbl> <dbl> <dbl>
1 10 0.16 0.14 0.61 0.86
2 10 0.16 0.14 0.61 0.86
Может быть, есть способ повторить столбцы так, чтобы они перекрывались так:
position `1.a` `1.b` `2.a` `2.b` `1.a` `1.b` `2.a` `2.b` ...
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 10 0.16 0.14 0.61 0.86 0.16 0.14 0.61 0.86
2 10 0.16 0.16 0.16 0.16 0.14 0.14 0.14 0.14
position `1.a` `1.a` `1.a` `1.a` `1.b` `1.b` `1.b` `1.b` ...
Тогда я мог бы просто summarize
и получить разницу между строками.