2016-07-16 5 views
1

私はこれを理解しているように見えず、誰かが私を助けてくれることを望んでいました。件名間に欠けている日付のためのバックナンバー

私は、数日間にわたってテストされた多数のサブジェクトを持つデータセットを持っています。しかし、一部の被験者は特定の日に試験され、他の被験者は試験されなかった。私は、テストされていないときに被験者に欠落した日を挿入する方法があるのか​​疑問に思っていました。興味のある変数に "NA"を読み込ませるだけでしたか?このようにして、各サブジェクトの日付が表されます。

データセットの例を示します。ここでは、4日のテスト日、1/1/2016-1/4/2016があります。その期間中に一部の被験者に日付が不足していることがわかります。

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 

Subject  Date variable.1 variable.2 
 
1  Pat 2016-01-01 8.341378 22.51838 
 
2  Pat 2016-01-02 13.654822 19.50904 
 
3  Pat 2016-01-03 14.078425 28.36888 
 
4  Pat 2016-01-04 10.023648 24.18750 
 
5  Bob 2016-01-01 11.409657 30.06393 
 
6  Bob 2016-01-02 6.169438 21.85819 
 
7  Bob 2016-01-03 12.388085 14.60456 
 
8  Bob 2016-01-04 15.311546 20.31606 
 
9  Jeff 2016-01-01 16.502111 30.14965 
 
10 Jeff 2016-01-03 9.941720 22.56740 
 
11  Tom 2016-01-01 9.594301 24.72596 
 
12  Tom 2016-01-02 17.798279 14.81699 
 
13  Tom 2016-01-03 6.097222 24.92846 
 
14  Tom 2016-01-04 8.434669 20.47638 
 
15  Art 2016-01-02 1.687036 37.17307 
 
16  Art 2016-01-02 5.855712 19.91173 
 
17  Art 2016-01-03 8.295704 18.69689 
 
18 Karl 2016-01-02 4.747927 21.72881 
 
19 Karl 2016-01-04 0.676263 27.17804 
 
20  Hal 2016-01-01 7.685603 23.51874 
 
21  Hal 2016-01-02 16.965498 15.08288 
 
22  Hal 2016-01-03 7.018053 20.09474 
 
23  Hal 2016-01-04 11.111013 22.21986

テーマ日付variable.1 variable.2 1号2016年1月1日8.341378 22.51838 2号2016年1月2日13.654822 19.50904 3号2016から01 -03 14.078425 28.36888 4 Pat 2016-01-04 10.023648 24.18750 5 Bob 2016-01-01 11.409657 30.06393 6 Bob 2016-01-02 6.169438 21.85819 7 Bob 2016-01-03 12.388085 14.60456 8ボブ2016年1月4日15.311546 20.31606 9ジェフ2016年1月1日16.502111 30.14965 10ジェフ・2016年1月3日9.941720 22.56740 11トム2016年1月1日9.594301 24.72596 12トム2016年1月2日17.798279 14.81699 13トム2016年1月3日6.097222 24.92846 14トム2016年1月4日8.434669 20.47638 15アート2016年1月2日1.687036 37.17307 16アート2016年1月2日5.855712 19.91173 17アート2016年1月3日8.295704 18.69689 18カール2016年1月2日4.747927 21.72881 19カール2016年1月4日0.676263 27.17804 20ハル2016年1月1日7.685603 23.51874 21ハル2016年1月2日16.965498 15.08288 22ハル2016年1月3日7.018053 20.09474 23ハル・2016年1月4日11.111013 22.21986

答えて

1

私たちは、元のデータセットとleft_joinを行い、その後、「件名」と「日」のための完全な組み合わせを作成するためにexpand.gridを使用することができます。

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) 
+1

パーフェクトになります。それは本当にうまくいく!ありがとう! – user3585829

+0

私はtidyrライブラリをロードしますが、それは完全な関数を見つけることができないことを私に伝えますか? 私のデータセットにはもう1つの質問がありますが、私はそのサブジェクトの特定の記述子であるいくつかの列を持っています。 dplyrコードを使用すると、日付を追加するときに、それらの列にNAが挿入されます。その列をその個人の記述子でコード化する方法はありますか?それはかなり混乱し複雑になるかもしれないようだ。 – user3585829

+0

@ user3585829私は 'tidyr_0.4.1.9000'を使用しています。ここでは、件名と日付のみを使用して完全な組み合わせを取得しているため、他のすべての列は当然NAで埋められます。 1つのオプションは、expand.gridを実行している間にDateまたはSubjectでカラムを 'ペーストする 'ことです。その後、それを分離します。 – akrun

関連する問題