Re: [問題] 兩個變項合併為一

作者: celestialgod (天)   2015-08-10 15:32:29
※ 引述《zxas10143 (~無言以對~)》之銘言:
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉
: 各位高手好
: 小的想請教前輩們如何將變項X與變項Y合併為變項Z
: 如下:
: x y z(合併後)
: 1 NA 1
: 2 NA 2
: NA 5 5
: 3 NA 3
: NA 8 8
: 用STATA的語言就是 egen z=rowfirst( x y )
: 不知道R是怎麼做的呢?
: 還煩請前輩們解惑
五種方法任君挑選^^"
## naive method
dat = data.frame(x = c(1,2,NA,3,NA), y = c(NA,NA,5,NA,8))
dat$z = dat$x
dat$z[is.na(dat$x)] = dat$y[is.na(dat$x)]
## cool method
dat = data.frame(x = c(1,2,NA,3,NA), y = c(NA,NA,5,NA,8))
dat$z = ifelse(is.na(dat$x), dat$y, dat$x)
## more elegant
dat = data.frame(x = c(1,2,NA,3,NA), y = c(NA,NA,5,NA,8))
dat$z = with(dat, ifelse(is.na(x), y, x))
## tricky but helpful for three or more columns
dat = data.frame(x = c(1,2,NA,3,NA), y = c(NA,NA,5,NA,8))
dat$z = na.omit(c(unlist(t(dat))))
## only available for numeric columns
dat = data.frame(x = c(1,2,NA,3,NA), y = c(NA,NA,5,NA,8))
dat$z = rowSums(dat, TRUE)
benchmark: http://pastebin.com/z03vffti
我一般都用2或3... 雖然看起來benchmark是比較沒效率XDDDD (但是都很快就是)
但是在dplyr中使用的話,比較方便
搭配data.table也比較不會有複製資料的問題
4跟5是我google到的方法,歡迎參考看看。
reference: http://tinyurl.com/nzjtxea
作者: zxas10143 (~無言以對~)   2015-08-10 15:50:00
先跪在說,c大需要擦鞋洗腳嗎XD擦鞋我拿手低~

Links booklink

Contact Us: admin [ a t ] ucptt.com