根据时间数据中的最后观察值制作条件变量

时间:2018-07-03 17:01:56

标签: r

ID T V1 
1 1 1 
1 2 1 
2 1 0
2 2 0
3 1 1
3 2 1
3 3 1

我需要根据这些数据制作两个变量。当V1 = 1时,第一个值必须是最后一个观察值 上的1,然后所有情况下最后一个观察值应为1。理想的最终产品:

ID T V1 v2 v3
1 1  1   0  0
1 2  1   1  1
2 1  0   0  0
2 2  0   0  1
3 1  1   0  0
3 2  1   0  0
3 3  1   1  1

谢谢。

1 个答案:

答案 0 :(得分:1)

在数据包 dplyr 中,您可以根据变量对数据进行分组(根据情况选择ID)并为每个组进行操作。由于您的一列(T)已经计算了每个观察值(在每个组中)的排名,因此您可以与函数n()结合使用,该函数返回每个组的行数以便获得你想要的。

假设您的数据在数据框df中:

df %>% 
  group_by(ID) %>% 
  mutate(
    v2 = 1 * (`T` == n()),
    v3 = 1 * (`T` == n()) * (V1 == 1) 
  )

# A tibble: 7 x 5
# Groups:   ID [3]
     ID     T    V1    v2    v3
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     1     1     0     0
2     1     2     1     1     1
3     2     1     0     0     0
4     2     2     0     1     0
5     3     1     1     0     0
6     3     2     1     0     0
7     3     3     1     1     1