我有一个包含两波数据的数据集。我想把年龄变换为时间不变,以时间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 | 时间 | 年龄 |
---|---|---|
1001 | 1 | 23 |
1001 | 2 | 25 |
1002 | 1 | 54 |
1002 | 2 | 56 |
我们可以通过"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