先謝謝celestailgod大大的幫忙,不過抱歉小弟資質駑鈍
希望可以跟板上各位前輩求教討論>"<
※ 引述《celestialgod (天)》之銘言:
: 用merge跟match就可以達到你要的效果了
: library(data.table)
: library(pipeR)
: factory_list_dt <- data.table(factory = c("台北", "台中", "高雄",
: "新竹", "台南"))
: dt1 <- data.table(factory = c("台北", "高雄", "新竹", "台中", "台南"),
: rev = c(9.23913043478261,16.3571428571429,
: 15.6206896551724, 15.0980392156863, 10))
: dt1_sorted <- merge(factory_list_dt, dt1, by = "factory", all.x = TRUE) %>>%
: `[`(match(factory_list_dt$factory, factory))
我知道前面 merge 會藉由對應factory這個欄位 把 f_list, dt1 join 在一起
(如果沒理解錯的話)
這邊主要想請問的都是`[`(match(factory_list_dt$factory, factory)) 這一行
1. match函式的第二個參數 "factory" 是甚麼東西的factory呢?
個人猜測是前面 merge() 完產生出來的新的data table(在此設為dt_new)
所以意思應該是「列出 f_list_dt中factory,在dt_new中的位置」
不知道這樣的理解正不正確?
2. 那為什麼要用()把match的結果包起來?
3. `[` 的意思是...?
: dt2 <- data.table(factory = c("台北", "台中", "高雄"),
: rev = c(9.23913043478261,16.3571428571429, 15.6206896551724))
: dt2_sorted <- merge(factory_list_dt, dt2, by = "factory", all.x = TRUE) %>>%
: `[`(match(factory_list_dt$factory, factory)) %>>%
: `[`(j = rev := ifelse(is.na(rev), 0, rev))
這邊 `[`(j = rev := ifelse(is.na(rev), 0, rev)) 也有同樣的問題
我知道大概意思是判斷rev, 如果其值是na的話就補0 否則就填rev原本的值
可是這個j是怎麼冒出來的啊???
最後真的不得不感謝celestialgod大大,每次都可以瞬間解決問題
而且程式碼都好簡潔啊!
也謝謝大家熱情幫忙!! :)