R 跨受试者补齐NAs中缺失的日期

R 跨受试者补齐NAs中缺失的日期,r,date,R,Date,我似乎无法理解这一点,希望有人能帮我解决 我有一个数据集,其中有一组经过几天测试的受试者。然而,一些受试者在特定的日子里接受了测试,而其他人则没有。我想知道是否有一种方法可以插入受试者未测试时缺失的天数,并将感兴趣的变量读为“NA”?这样,每个主题的日期都会显示出来 这里是一个示例数据集,其中我有4个测试日,2016年1月1日-2016年1月4日。您可以看到,某些主题在此期间缺少日期 Subject <- c("Pat", "Pat", "Pat", "Pat", "Bob", "Bob"

我似乎无法理解这一点,希望有人能帮我解决

我有一个数据集,其中有一组经过几天测试的受试者。然而,一些受试者在特定的日子里接受了测试,而其他人则没有。我想知道是否有一种方法可以插入受试者未测试时缺失的天数,并将感兴趣的变量读为“NA”?这样,每个主题的日期都会显示出来

这里是一个示例数据集,其中我有4个测试日,2016年1月1日-2016年1月4日。您可以看到,某些主题在此期间缺少日期

Subject <- c("Pat", "Pat", "Pat", "Pat", "Bob", "Bob", "Bob", "Bob", "Jeff", "Jeff", "Tom", "Tom", "Tom", "Tom", "Art", "Art", "Art", "Karl", "Karl", "Hal", "Hal", "Hal", "Hal")
variable.1 <- rnorm(n = Subject, mean = 10, sd = 5)
variable.2 <- rnorm(n = Subject, mean = 20, sd = 5)
Date <- c("1/1/2016", "1/2/2016", "1/3/2016", "1/4/2016","1/1/2016", "1/2/2016", "1/3/2016", "1/4/2016", "1/1/2016", "1/3/2016", "1/1/2016", "1/2/2016", "1/3/2016", "1/4/2016", "1/2/2016", "1/2/2016", "1/3/2016", "1/2/2016", "1/4/2016", "1/1/2016", "1/2/2016", "1/3/2016", "1/4/2016" )

d <- data.frame(Subject, Date, variable.1, variable.2)
d$Date <- as.Date(d$Date, "%m/%d/%Y")

d

我们可以使用
expand.grid
创建“Subject”和“Date”的完整组合,然后与原始数据集进行
left_-join

library(dplyr)
expand.grid(Subject = unique(d$Subject), Date = unique(d$Date)) %>%
                 left_join(., d) %>%
                 arrange(Subject, Date)
#   Subject       Date  variable.1 variable.2
#1      Art 2016-01-01          NA         NA
#2      Art 2016-01-02  9.65145589   28.44836
#3      Art 2016-01-02 12.58161500   16.06862
#4      Art 2016-01-03  0.02990953   19.62926
#5      Art 2016-01-04          NA         NA
#6      Bob 2016-01-01  7.82691227   19.08990
#7      Bob 2016-01-02  8.88546512   27.16044
#8      Bob 2016-01-03 12.26231157   19.81463
#9      Bob 2016-01-04 12.60452244   20.30380
#10     Hal 2016-01-01  2.66644221   17.86939
#11     Hal 2016-01-02 11.45246295   23.04896
#12     Hal 2016-01-03  4.94271258   22.06501
#13     Hal 2016-01-04  0.92676435   11.43378
#14    Jeff 2016-01-01  9.19183973   22.99084
#15    Jeff 2016-01-02          NA         NA
#16    Jeff 2016-01-03 12.56990234   18.69434
#17    Jeff 2016-01-04          NA         NA
#18    Karl 2016-01-01          NA         NA
#19    Karl 2016-01-02  9.80615533   14.65699
#20    Karl 2016-01-03          NA         NA
#21    Karl 2016-01-04 11.04105033   16.88379
#22     Pat 2016-01-01  5.50443769   14.81744
#23     Pat 2016-01-02 15.96919707   15.67234
#24     Pat 2016-01-03  5.52737822   15.48899
#25     Pat 2016-01-04  5.70531242   25.04813
#26     Tom 2016-01-01  0.09573680   32.44053
#27     Tom 2016-01-02 14.82955222   21.76676
#28     Tom 2016-01-03 13.17820753   11.44786
#29     Tom 2016-01-04 15.23101038   26.10275

如果我们使用的是
tidyr
,那么这将变得更加紧凑

library(tidyr)
complete(d, Subject, Date)

我加载了tidyr库,但它告诉我它找不到完整的函数?不过还有一个问题,在我的数据集中,我有一些列是主题的特定描述符。当使用dplyr代码时,它只是在添加日期时在这些列中插入一个NA。有没有一种方法可以将这些列编码为该个人的描述符?看起来这可能会变得非常混乱和复杂。@user3585829我在这里使用的是
tidyr\u 0.4.1.9000
,在这种情况下,我们只使用主题和日期来获得完整的组合,所以其他所有列自然都会用NA填充。一个选项是在执行expand.grid时粘贴带有日期或主题的列,然后将其分开。