還記得前一天的練習嗎?要找出這樣狀況的使用者使用filter()並不難,但是在orders.csv 中,我們並沒有儲存使用者的聯絡方式,必須要拿BUYERID 去user.csv 查找才有可能,所以這邊要介紹如何合併兩邊的資料。
首先,我們先設定符合條件的訂單資料。
result <- orders %>%
mutate(Month = as.Date(orders$CREATETIME, "%Y-%m-%d %H:%M:%S")) %>%
mutate(Month = substring(Month,1,7)) %>%
separate(NAME, c("Category", "Brand"), sep="\\(") %>%
filter(Month=="2017-05", Category=="生活家電", 450<PRICE)
如果有操作過資料庫的人,應該都對join 不陌生,這邊教大家使用merge() 這個函式,第一個值放入另一個dataframe, by.x 和 by.y 分別是這兩個dataframe 合併前要參考的欄位,這邊的例子中,x 是orders.csv 而y 是user.csv,所以by.x 就是指派orders.csv 裡的BUYERID 欄位,by.y 指派user.csv 的ID 欄位。
result <- orders %>%
mutate(Month = as.Date(orders$CREATETIME, "%Y-%m-%d %H:%M:%S")) %>%
mutate(Month = substring(Month,1,7)) %>%
separate(NAME, c("Category", "Brand"), sep="\\(") %>%
filter(Month=="2017-05", Category=="生活家電", 450<PRICE) %>%
merge(user, by.x="BUYERID", by.y="ID")
執行完成後你便拿到一份聯絡清單。
但是這份清單稍嫌囉唆,有很多不必要的欄位出現,這邊可以用select() 這個函式,選擇我們有興趣的幾個欄位即可。
result <- orders %>%
mutate(Month = as.Date(orders$CREATETIME, "%Y-%m-%d %H:%M:%S")) %>%
mutate(Month = substring(Month,1,7)) %>%
separate(NAME, c("Category", "Brand"), sep="\\(") %>%
filter(Month=="2017-05", Category=="生活家電", 450<PRICE) %>%
merge(user, by.x="BUYERID", by.y="ID") %>%
select(ID, PRICE, PAYMENTTYPE, ACCOUNT, MOBILE)
好! 這樣看起來清爽多了!
Ref
day8原始碼