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