Sepertinya saya tidak dapat memahami hal ini dan berharap seseorang dapat membantu saya.

Saya memiliki kumpulan data yang memiliki banyak subjek yang telah diuji selama beberapa hari. Namun, beberapa mata pelajaran diuji pada hari-hari tertentu dan tidak pada hari-hari lainnya. Saya bertanya-tanya apakah ada cara untuk memasukkan hari-hari yang hilang untuk mata pelajaran, ketika mereka tidak diuji, dan hanya membaca "NA" untuk variabel yang menarik? Dengan cara ini tanggal diwakili untuk setiap mata pelajaran.

Berikut adalah contoh kumpulan data, di mana saya memiliki 4 hari pengujian, 1/1/2016 - 1/4/2016. Anda dapat melihat bahwa beberapa subjek kehilangan tanggal selama periode waktu tersebut.

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

Variabel Tanggal Perihal.1 variabel.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 01-01-2016 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 Seni 2016-01-02 1.687036 37.17307 16 Seni 2016-01-02 5.855712 19.91173 17 Seni 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

1
user3585829 16 Juli 2016, 06:23

1 menjawab

Jawaban Terbaik

Kita dapat menggunakan expand.grid untuk membuat kombinasi lengkap untuk "Subjek" dan "Tanggal", lalu lakukan left_join dengan dataset asli.

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

Jika kita menggunakan tidyr, maka ini menjadi lebih kompak

library(tidyr)
complete(d, Subject, Date)
1
akrun 16 Juli 2016, 06:55
Saya memuat perpustakaan yang lebih rapi tetapi itu memberi tahu saya bahwa itu tidak dapat menemukan fungsi yang lengkap? Satu pertanyaan lain, dalam kumpulan data saya, saya memiliki beberapa kolom yang merupakan deskriptor khusus dari subjek. Saat menggunakan kode dplyr itu hanya mencolokkan NA di kolom tersebut saat menambahkan tanggal. Apakah ada cara agar kolom-kolom itu dikodekan dengan deskriptor untuk individu itu? Sepertinya itu mungkin menjadi sangat berantakan dan rumit.
 – 
user3585829
16 Juli 2016, 07:06
Saya menggunakan tidyr_0.4.1.9000 Di sini, dalam hal ini, kami hanya menggunakan Subjek dan Tanggal untuk mendapatkan kombinasi penuh, jadi tentu saja semua kolom lainnya akan diisi dengan NA. Salah satu opsi adalah paste kolom dengan Tanggal atau Subjek saat melakukan expand.grid dan kemudian pisahkan setelahnya.
 – 
akrun
16 Juli 2016, 07:12