ฉันกำลังทำงานกับไฟล์ผู้มีสิทธิเลือกตั้งที่ยุ่งเหยิง พิจารณา tibble
ต่อไปนี้:
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),
)
ซึ่งดูเหมือนว่า:
# 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>
id
แต่ละตัวคือตัวระบุที่ไม่ซ้ำกันสำหรับผู้มีสิทธิเลือกตั้ง- คอลัมน์
demographic_info
ทั้งสองคอลัมน์เป็นเพียงตัวเติม เพียงเพื่อแสดงให้เห็นว่าฉันต้องการ รักษา ค่าเหล่านี้เมื่อฉันปรับรูปร่างข้อมูลใหม่
คอลัมน์ election_1
ถึง election_5
คือสิ่งที่ฉันสนใจ ข้อมูลมีโครงสร้างในลักษณะที่ไฟล์รวมการเลือกตั้ง 5 ครั้งล่าสุดที่มีคนเข้าร่วม election_1
คือรายการล่าสุด election_5
คือรายการล่าสุด
โปรดทราบว่าบุคคล A
ไม่เคยลงคะแนนเสียง ในขณะที่บุคคล D
มักจะลงคะแนนเสียงเสมอ สิ่งที่ฉันต้องการทำคือเปลี่ยนคอลัมน์เหล่านี้ให้เป็นตัวแปรจำนวนหนึ่ง: SE2016
, GN2016
, MT2014
, GN2012
ฯลฯ; นั่นคือค่าทั้งหมดใน election_1
ถึง election_5
ฉันอยากให้แต่ละตัวแปรเหล่านี้เป็นตัวแปรที่เป็น TRUE
หรือ FALSE
ไม่ว่าบุคคลนั้นจะปรากฏตัวในการสำรวจหรือไม่ ฉันได้ลองใช้รหัสนี้แล้ว:
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
อย่างไรก็ตาม spread
ส่งข้อผิดพลาด:
Error: Duplicate identifiers for rows (1, 6, 11, 16, 21), (12, 17, 22), (13, 18, 23), (20, 25)
เนื่องจากมีหลายรายการสำหรับแต่ละค่าของตัวแปร race
ฉันได้ลอง group_by(id)
ก่อนที่จะทำ spread
แต่เกิดข้อผิดพลาดเดียวกันนี้
ฉันต้องการให้ผลลัพธ์ tibble
มีลักษณะดังนี้:
# 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
ไม่นับเป็นคอลัมน์ลำดับหรือไม่ ไม่แน่ใจครับ ตามมาครับ - person Mark White   schedule 19.08.2017