【发布时间】:2018-11-29 14:07:48
【问题描述】:
我试图用关于 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 解决方案,但我不知道如何以“顺利”的方式做到这一点。我已经通过使用连接找到了解决方案,但与 dplyr 通常提供的“平滑”解决方案相比,这似乎相当乏味。
【问题讨论】: