[问题] 有关于资料整理(向右对齐)

楼主: 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