
library(dplyr)
library(tidyr)

d0 <-data.frame(name = LETTERS[1:20],
             referrer1 = sample(c(letters[1:5], NA), 20, replace = T))


d1 <-
     d0 %>%
     select(name, referrer1) %>%
     filter(!is.na(referrer1)) %>%
     spread(referrer1, referrer1) %>%
     mutate_if(is.factor, as.character) %>%
    # 在屬性為factor的情況下，如果要取代的值不存在於原本的level一樣會變na
    # 所以先將所有factor的column轉為character
     replace(is.na(.), 0) %>%
    # 取代na為 0
     mutate_at(vars(-name),
               .funs = funs( replace(. != 0 , 0 , 1 ) ))
    # 把所有非0的字串取代為1(僅針對name以外的column執行)