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

看板R_Language作者 (攸藍)時間9年前 (2015/07/12 23:52), 9年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.9.106 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1436716370.A.701.html ※ 編輯: celestialgod (1.163.9.106), 07/13/2015 00:14:00
文章代碼(AID): #1LeerIS1 (R_Language)
文章代碼(AID): #1LeerIS1 (R_Language)