[問題] 用0取代NA,但不要每一欄

作者: paranoia5201 (邁向研究生)   2019-04-23 17:31:41
我的原始資料長相如下:
> check18.1 %>%
+ select(name, referrer1) %>%
+ head()
name referrer1
<chr> <chr>
1 温○珠 王○芸
2 大○食品 陳○如
3 尤○女 <NA>
4 尤○玉 <NA>
5 王○仁 王○芸
6 王○修 <NA>
透過下列方式,轉為如下模樣:
> check18.2 <-
+ check18.1 %>%
+ select(name, referrer1) %>%
+ filter(!is.na(referrer1)) %>%
+ spread(referrer1, referrer1)
> head(check18.2)
name  王○芸 陳○如
1 温○珠  王○芸 <NA>
2 大○食品 <NA> 陳○如
3 尤○女  <NA> <NA>
4 尤○玉  王○芸 <NA>
5 王○仁  <NA> <NA>
6 王○修  <NA> <NA>
我期待把資料重新編碼後變成這樣:
name  王○芸 陳○如
1 温○珠   1 0
2 大○食品 0 1
3 尤○女   0 0
4 尤○玉   1 0
5 王○仁   0 0
6 王○修   0 0
【我的作法】
先把<NA>都先變成0
> check18.2[is.na(check18.2)] <- 0
name  王○芸 陳○如
1 温○珠  王○芸 0
2 大○食品 0 陳○如
3 尤○女  0 0
4 尤○玉   王○芸 0
5 王○仁  0 0
6 王○修  0 0
再把文字內容改成1,結果......
> check18.2[check18.2 != 0] <- 1
name  王○芸 陳○如
1 1   1 0
2 1 0 1
3 1   0 0
4 1   1 0
5 1 0 0
6 1   0 0
欄位name裡面的資料也都被取代為1了,這不是我想要的結果!
如果逐欄訂正是可以(check18.2$王○芸[check18.2$王○芸 == '王○芸'] -> 1)
但是資料展開的欄位其實有20多項,故想要在此尋求簡單快速的方法。
煩請指教,感謝~
作者: andrew43 (討厭有好心推文後刪文者)   2019-04-23 22:02:00
作者: paranoia5201 (邁向研究生)   2019-04-23 22:21:00
cool耶!是我要的沒錯,可是我完全看不懂其中邏輯…
作者: andrew43 (討厭有好心推文後刪文者)   2019-04-23 22:44:00
dcast()以name為列,以referrer1為欄擴展開來求length因此,有出現記為1沒出現記為0。
作者: bboybighead2 (腳毛會唱歌)   2019-04-24 16:46:00
https://ideone.com/PbhLYv dplyr的做法,供參考

Links booklink

Contact Us: admin [ a t ] ucptt.com