[問題] 有關於資料整理(向右對齊)

作者: gn01349943 (flying)   2015-07-12 23:34:18
[軟體熟悉度]:
使用者(已經有用R 做過不少作品)
[問題敘述]:
請簡略描述你所要做的事情,或是這個程式的目的
有一個data.table如以下格式,
x b V3 V4
1 1 2 1 1
2 2 3
3 3 4
4 4 5 4 4
5 5 6 5 5
6 1 2 1 1
我想要變成以下格式,
x b V3 V4
1 1 2 1 1
2 2 3
3 3 4
4 4 5 4 4
5 5 6 5 5
6 1 2 1 1
目前我可以用一個迴圈把它完成,如以下,
但是我想問有沒有使用data.table語言的方法?
因為實際資料有達到十萬多條row。
len <- ncol(dd)
dd <- as.data.frame(dd)
for (x in 1:nrow(dd)) {
idx <- sum(dd[x,]!="")
if(idx != len) {
dd[x,((len-idx+1):len)] <- dd[x,1:idx]
dd[x,1:(len-idx)] <- ""
}
}
關於data.table的方式,我有想到一個方法如下,
可是執行一直報錯,所以不知道問題在哪?
len=ncol(dd)
fun <- function(x) {
idx <- len-length(which(x!=''))
if (idx !=0) {
res <- cbind(array(rep('',idx),c(1,idx)),as.vector(x[which(x!='')]))
} else {
res <- as.vector(x[which(x!='')])
}
res
}
dd[,names(dd)[1:4]:=apply(.SD, 1, fun)]
先謝謝大家了!
作者: celestialgod (天)   2015-07-13 00:01:00
.SD是每一行,他只能用lapply一次丟一行
作者: gn01349943 (flying)   2015-07-13 01:22:00
謝謝提示!

Links booklink

Contact Us: admin [ a t ] ucptt.com