我想使用dplyr在该个人的特定时间点将每个ID的DV列中的NA值替换为DV值:


我想将每个ID的时间2的NA(DV列)替换为该特定ID的时间4的DV值。
我想将每个ID的时间4的NA(DV列)替换为该特定ID的时间0的DV值。


我不知道如何使用dplyr。
这是我的数据集:

ID   TIME  DV
1      0   5
1      2   NA
1      4   4
2      0   3
2      2   3
2      4   NA
3      0   7
3      2   NA
3      4   9


预期产量:

ID   TIME  DV
1      0   5
1      2   4
1      4   4
2      0   3
2      2   3
2      4   3
3      0   7
3      2   9
3      4   9


任何建议表示赞赏。
最好,

最佳答案

按“ ID”分组后,我们可以使用fill

library(dplyr)
library(tidyr)
df1 %>%
   arrange(ID, TIME) %>%
   # or as @r2evans mentioned
   #arrange(ID, factor(TIME, levels = c(0, 2, 4))) %>%
   group_by(ID) %>%
   fill(DV, .direction = 'downup')
# A tibble: 9 x 3
# Groups:   ID [3]
#     ID  TIME    DV
#  <int> <int> <int>
#1     1     0     5
#2     1     2     4
#3     1     4     4
#4     2     0     3
#5     2     2     3
#6     2     4     3
#7     3     0     7
#8     3     2     9
#9     3     4     9

数据
df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), TIME = c(0L,
2L, 4L, 0L, 2L, 4L, 0L, 2L, 4L), DV = c(5L, NA, 4L, 3L, 3L, NA,
7L, NA, 9L)), class = "data.frame", row.names = c(NA, -9L))

关于r - Ifelse与Dplyr在R中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61736524/

10-10 17:59