我试图找到一种更简单的方法来计算数据框中变量(由列表示)的变化,使用dplyr
。我的玩具数据集是这样的
structure(list(CAR = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 1L,
2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("a",
"b", "c", "d", "e", "f"), class = "factor"), TIME = c(0L, 0L,
0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L
), VAR = c(20L, 30L, 40L, 50L, 60L, 70L, 30L, 40L, 50L, 60L,
70L, 80L, 40L, 50L, 60L, 70L, 80L, 90L)), .Names = c("CAR", "TIME",
"VAR"), class = "data.frame", row.names = c(NA, -18L))
看起来像
CAR TIME VAR
1 a 0 20
2 b 0 30
3 c 0 40
4 d 0 50
5 e 0 60
6 f 0 70
7 a 1 30
8 b 1 40
9 c 1 50
10 d 1 60
11 e 1 70
12 f 1 80
13 a 2 40
14 b 2 50
15 c 2 60
16 d 2 70
17 e 2 80
18 f 2 90
我正在尝试计算变化VAR
之间TIME
等于0
以及其他时间,例如1,2
对于每个CAR
.
这就是我所做的,这似乎是一种非常复杂的方式,首先我得到的值VAR
at TIME
等于0
library(dplyr)
X <- local_test %>% filter(TIME == 0) %>% group_by(CAR) %>% mutate(baseline_VAR = VAR)
X
好像
Source: local data frame [6 x 4]
Groups: CAR
CAR TIME VAR baseline_VAR
1 a 0 20 20
2 b 0 30 30
3 c 0 40 40
4 d 0 50 50
5 e 0 60 60
6 f 0 70 70
然后,我做了一个left_join
与原始数据框local_test
Y <- left_join(local_test, X, by = c("CAR"))
Y
好像
CAR TIME.x VAR.x TIME.y VAR.y baseline_VAR
1 a 0 20 0 20 20
2 b 0 30 0 30 30
3 c 0 40 0 40 40
4 d 0 50 0 50 50
5 e 0 60 0 60 60
6 f 0 70 0 70 70
7 a 1 30 0 20 20
8 b 1 40 0 30 30
9 c 1 50 0 40 40
10 d 1 60 0 50 50
11 e 1 70 0 60 60
12 f 1 80 0 70 70
13 a 2 40 0 20 20
14 b 2 50 0 30 30
15 c 2 60 0 40 40
16 d 2 70 0 50 50
17 e 2 80 0 60 60
18 f 2 90 0 70 70
最后,我添加一列Y
,计算出的变化VAR
两个不同之间TIME
for CAR
Y %>% group_by(CAR) %>% mutate(change_VAR = VAR.x - baseline_VAR)
Final Y
好像
Source: local data frame [18 x 7]
Groups: CAR
CAR TIME.x VAR.x TIME.y VAR.y baseline_VAR change_VAR
1 a 0 20 0 20 20 0
2 b 0 30 0 30 30 0
3 c 0 40 0 40 40 0
4 d 0 50 0 50 50 0
5 e 0 60 0 60 60 0
6 f 0 70 0 70 70 0
7 a 1 30 0 20 20 10
8 b 1 40 0 30 30 10
9 c 1 50 0 40 40 10
10 d 1 60 0 50 50 10
11 e 1 70 0 60 60 10
12 f 1 80 0 70 70 10
13 a 2 40 0 20 20 20
14 b 2 50 0 30 30 20
15 c 2 60 0 40 40 20
16 d 2 70 0 50 50 20
17 e 2 80 0 60 60 20
18 f 2 90 0 70 70 20
这似乎需要做很多额外的工作,需要将额外的列添加到原始数据框中。我需要对一个大数据框重复执行此操作。有没有一种更简单(一步)的计算方法change_VAR
?
Thanks!