如何使用dplyr(R)创建时间不变变量



我有一个包含两波数据的数据集。我想把年龄变换为时间不变,以时间2的值作为时间1。使用dplyr执行此操作的最佳方法是什么?

library(dplyr)
df <- tibble(ID = c(1001, 1001, 1002, 1002), time = c(1,2,1,2), age = c(23,25,54,56))

表格:

ID时间年龄
1001123
1001225
1002154
1002256

我们可以通过"ID"进行分组,并在mutate中获得"年龄"的max

library(dplyr)
df %>%
group_by(ID) %>% 
mutate(age = max(age)) %>% 
ungroup

或者,如果它应该来自"时间"2-基于带有"时间"的逻辑表达式的"年龄"子集,则选择第一个元素(如果特定的"ID"没有"时间"值2,则也返回NA

df %>%
group_by(ID) %>%
mutate(age = age[time == 2][1]) %>%
ungroup

-输出

# A tibble: 4 × 3
ID  time   age
<dbl> <dbl> <dbl>
1  1001     1    25
2  1001     2    25
3  1002     1    56
4  1002     2    56

或者另一个选项是arrange"ID"、"时间",并选择最后一个元素(假设"时间"中只有1和2,假设所有"ID"都有时间2(

df %>% 
arrange(ID, time) %>%
group_by(ID) %>%
mutate(age = last(age)) %>%
ungroup

最新更新