【发布时间】:2020-05-21 11:43:22
【问题描述】:
我有一个这种格式的小标题:
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) 将复制值分散到列中,但我不知道从那里去哪里。我需要使解决方案可推广,因为我不知道我将拥有多少条件或复制。我怎样才能做到这一点?
编辑:
类似这样的:
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 并获取行之间的差异。
【问题讨论】:
-
什么是“一对复制品”? (你想要创造差异的那个)
-
也许有我没有遵循的逻辑,因为将其转换为宽形数据似乎会使您的工作更加困难和混乱。制作一个条件变量并将复制粘贴在一起,获取差异,然后进行任何汇总计算。在这一点上,如果我的想法正确的话,你只希望有 2 列
-
“一对重复”是一对条件中的一对重复。例如 1.a 和 2.a,或 1.a 和 2.b,或 2.b 和 3.b,等等。
-
另外,重复的行名是怎么回事?我尝试将其复制为文本并使用
read.table将其读入,但行名会导致错误。dput在数据上将更容易重新创建 -
格式错误,现已修复。