Re: [問題] data frame排序問題

看板R_Language作者 (locka)時間9年前 (2016/11/03 00:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
先謝謝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大大,每次都可以瞬間解決問題 而且程式碼都好簡潔啊! 也謝謝大家熱情幫忙!! :) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.127.174 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1478104734.A.F80.html
文章代碼(AID): #1O6XQU-0 (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1O6XQU-0 (R_Language)