Re: [问题] data frame排序问题

楼主: locka (locka)   2016-11-03 00:38:51
先谢谢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大大,每次都可以瞬间解决问题
而且程式码都好简洁啊!
也谢谢大家热情帮忙!! :)

Links booklink

Contact Us: admin [ a t ] ucptt.com