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
谢谢。
答案 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