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

作者: gn01349943 (flying)   2015-07-13 00:33:44
※ 引述《celestialgod (攸藍)》之銘言:
: ※ 引述《gn01349943 (flying)》之銘言:
: : [軟體熟悉度]:
: : 使用者(已經有用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)] <- ""
: : }
: : }
: 如果是我 我會考慮下面的做法,供您參考:
: library(data.table)
: library(plyr)
: library(dplyr)
: library(magrittr)
: dt = fread("
: x,b,V3,V4
: 1, 2, 1, 1
: 2, 3,,
: 3, 4,,
: 4, 5, 4, 4
: 5, 6, 5, 5
: 1, 2, 1, 1")
: dt
: # x b V3 V4
: # 1: 1 2 1 1
: # 2: 2 3 NA NA
: # 3: 3 4 NA NA
: # 4: 4 5 4 4
: # 5: 5 6 5 5
: # 6: 1 2 1 1
: PS:如果不是NA,下面which, filter條件可以自己改成抓得出來的值
: 像是若是"",就用V4=="",而非is.na(V4)
: dt[which(is.na(dt$V4))] = filter(dt, is.na(V4)) %>% select(x, b) %>%
: cbind(matrix(rep(NA_integer_ ,ncol(.)*nrow(.)), nrow(.)), .)
: PS2: 如果是"",NA_integer_要改成NA_character_,這樣column的class才對
: dt
: # x b V3 V4
: # 1: 1 2 1 1
: # 2: NA NA 2 3
: # 3: NA NA 3 4
: # 4: 4 5 4 4
: # 5: 5 6 5 5
: # 6: 1 2 1 1
感謝回覆!
但我題目可能說的不夠清楚,實際情況是有值項結束不是固定的,
這樣就可能就需要再加個判斷有多少數量在each row,
例如,資料可能長這樣子,
(dd <- data.table(x=1:6,b=c(2,'',4,5,6,7),c(1,'','',4,5,6),c(1,'','',4,5,''),c('','','',4,5,'')))
x b V3 V4 V5
1: 1 2 1 1
2: 2
3: 3 4
4: 4 5 4 4 4
5: 5 6 5 5 5
6: 6 7 6
想要變成這樣的格式,
x b V3 V4 V5
1 1 2 1 1
2 2
3 3 4
4 4 5 4 4 4
5 5 6 5 5 5
6 6 7 6
自問自答一下,睡覺前突然想到了!
dd1 <- data.table(t(dd))
len <- nrow(dd1)
fun <-function(x){
idx <- len-length(which(x!=''))
if (idx !=0) {
res <- rbind(array(rep('',idx),c(idx,1)), as.matrix(x[which(x!='')],ncol=1))
} else {
res <- as.matrix(x[which(x!='')],ncol=1)
}
res
}
res <- dd1[,lapply(.SD,fun)]
res <- data.table(t(res))
不知道是否還有更快速的寫法?
謝謝。
作者: obarisk (OSWALT)   2015-07-15 12:47:00
全部連起來,sprintf,再cut

Links booklink

Contact Us: admin [ a t ] ucptt.com