首页 > 解决方案 > 从一个时间点(中间一个)到更早和更晚的时间点填充缺失值

问题描述

id <- rep(seq(1, 5, by=1), 4)
code <- rep(c(NA, "abcd11", NA, NA), each=5)
time <- rep(c("baseline", "screening", "3M", "6M"), each=5)

my.df <- data.frame(id, code, time)

my.df <- my.df %>% 
  arrange(my.df$id)

我有一个与上面的示例相似的数据集,其中每个参与者都有一个关联的 id,但也有一个代码(带有字母和数字的分类变量)。

但是,该代码仅在一个特定时间点(筛选)出现。

此外,一些参与者有不同数量的时间点,因为他们已经退出。

我想在所有时间点重复参与者的代码。

标签: r

解决方案


尝试使用这种tidyverse方法fill()

library(tidyverse)
#Data
id<-rep(seq(1,5, by = 1),4)
code <- rep(c(NA,"abcd11", NA, NA),each = 5)
time<-rep(c("baseline","screening", "3M", "6M"),each = 5)
my.df<-data.frame(id, code, time,stringsAsFactors = F)
#Fill
my.df <- my.df %>% fill(code,.direction = 'downup')

输出:

   id   code      time
1   1 abcd11  baseline
2   2 abcd11  baseline
3   3 abcd11  baseline
4   4 abcd11  baseline
5   5 abcd11  baseline
6   1 abcd11 screening
7   2 abcd11 screening
8   3 abcd11 screening
9   4 abcd11 screening
10  5 abcd11 screening
11  1 abcd11        3M
12  2 abcd11        3M
13  3 abcd11        3M
14  4 abcd11        3M
15  5 abcd11        3M
16  1 abcd11        6M
17  2 abcd11        6M
18  3 abcd11        6M
19  4 abcd11        6M
20  5 abcd11        6M

推荐阅读