Saya sedang mengerjakan file pemilih yang berantakan. Perhatikan tibble
berikut ini:
library(dplyr)
library(tidyr)
dat <- tibble(
id = factor(c("A","B","C","D","E")),
demographic_info1 = round(rnorm(5),2),
demographic_info2 = round(rnorm(5),2),
election_1 = c(NA,"GN2016","GN2016","SE2016","GN2008"),
election_2 = c(NA,"MT2014","GN2012","GN2016","GN2004"),
election_3 = c(NA,NA,NA,"MT2014","GN2000"),
election_4 = c(NA,NA,NA,"GN2012",NA),
election_5 = c(NA,NA,NA,"MT2010",NA),
)
Yang terlihat seperti:
# A tibble: 5 x 8
id demographic_info1 demographic_info2 election_1 election_2 election_3 election_4 election_5
<fctr> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
1 A -1.50 0.81 <NA> <NA> <NA> <NA> <NA>
2 B -1.84 -0.64 GN2016 MT2014 <NA> <NA> <NA>
3 C 1.66 -0.10 GN2016 GN2012 <NA> <NA> <NA>
4 D 0.91 -0.08 SE2016 GN2016 MT2014 GN2012 MT2010
5 E 0.04 -1.15 GN2008 GN2004 GN2000 <NA> <NA>
- Setiap
id
adalah pengidentifikasi unik untuk seorang pemilih. - Dua kolom
demographic_info
adalah pengisi, hanya untuk menunjukkan bahwa saya ingin mempertahankan nilai-nilai ini ketika saya melakukan pembentukan ulang data.
Kolom election_1
hingga election_5
adalah kolom yang saya minati. Data disusun sedemikian rupa sehingga file tersebut mencakup 5 pemilu terbaru yang pernah diikuti seseorang. election_1
adalah pemilu terbaru, election_5
adalah pemilu terbaru.
Perhatikan bahwa orang A
tidak pernah memilih, sedangkan orang D
selalu memilih. Yang ingin saya lakukan adalah mengubah kolom ini menjadi sejumlah variabel: SE2016
, GN2016
, MT2014
, GN2012
, dll.; yaitu, semua nilai di election_1
hingga election_5
. Saya ingin masing-masing variabel ini menjadi TRUE
atau FALSE
untuk menentukan apakah orang tersebut hadir atau tidak dalam pemungutan suara. Saya telah mencoba kode ini:
dat %>% # take data
gather(election, race, election_1:election_5) %>% # gather by election
mutate(temp=TRUE) %>% # make new variable that is all TRUE
select(-election) %>% # drop election variable
spread(race, temp, fill=FALSE) # spread by this all TRUE variable, fill all NAs as FALSE
Namun, spread
memunculkan kesalahan:
Error: Duplicate identifiers for rows (1, 6, 11, 16, 21), (12, 17, 22), (13, 18, 23), (20, 25)
Hal ini karena terdapat beberapa entri untuk setiap nilai variabel race
. Saya sudah mencoba group_by(id)
sebelum melakukan spread
, tetapi kesalahan yang sama terjadi.
Saya ingin hasil tibble
terlihat seperti:
# A tibble: 5 x 11
id demographic_info1 demographic_info2 SE2016 GN2016 MT2014 GN2012 MT2010 GN2008 GN2004 GN2000
<fctr> <dbl> <dbl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl>
1 A -0.91 -0.56 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2 B 1.24 -1.78 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
3 C 0.61 0.11 FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
4 D 2.43 -0.53 TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
5 E -1.40 -1.23 FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
spread
- person akrun   schedule 19.08.2017id
tidak dihitung sebagai kolom urutan? Tidak yakin saya mengikuti. - person Mark White   schedule 19.08.2017