Re: [問題] 非等長樣本拆分

作者: celestialgod (天)   2015-11-18 11:45:35
用矩陣想一下就可以搞定了~~ 不用想得太複雜XD
樣本太大,再考慮其他做法吧,不然一般情況下,matrix + for滿快的
(#1LkRShkm (R_Language) )
我有想到用apply做,可是速度還是太慢XD,最好的方式還是用matrix + for~~
library(magrittr)
dat = read.csv("simul1.csv", header = TRUE) %>% as.matrix
out = replicate(3, matrix(NA, nrow(dat), max(dat[,1]) + 1), simplify = FALSE)
for (i in 1:nrow(dat))
{
for (k in 1:3)
out[[k]][i, 1:(dat[i,1]+1)] = c(dat[i,1], dat[i,
((k-1)*dat[i,1]+1):(k*dat[i,1])])
}
for (k in 1:3)
out[[k]] %>% set_colnames(c('length', paste0('V', 1:(ncol(.)-1)))) %>%
write.csv(paste0('outData_', k, '.csv'))
※ 引述《sinclairJ (SunnyGymBoy)》之銘言:
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 每一列為一樣本 每個樣本有些非等長
: 一樣本裡有三條時間序列 (長度為length)
: 我要把每個樣本的三條序列分開
: 之後再把每樣本的全部第一條序列存成csv
: 每樣本的第二條序列也存成csv
: 第三條也是 ,所以共會輸出三個檔案
: [範例示意]:
: Data length v1 v2 v3 v4 v5 v6
: 1 2 5 4 3 1 2 1
: 2 1 4 3 2
: 3 2 1 2 6 8 7 1
: ps. 以Data1 來說明
: 5,4就是第一條時間序列,3,1是第二條...以此類推, v為時間點,每個樣本時間點非等長
: csv1:
: Data length v1 v2
: 1 2 5 4
: 2 1 4
: 3 2 1 2
: csv2:
: Data length v1 v2
: 1 2 3 1
: 2 1 3
: 3 2 6 8
: csv3
: Data length v1 v2
: 1 2 2 1
: 2 1 2
: 3 2 7 1
: 資料連結:
: https://www.dropbox.com/s/mwzfou8m22bb1jm/simul1.csv?dl=0
: 感謝各位前輩指導
作者: sinclairJ (KEEP MOVING FORWARD)   2015-11-19 18:12:00
想請教%>%是什麼樣的指令呢?古哥大神不回我qq
作者: celestialgod (天)   2015-11-19 18:13:00
直接在板上搜尋magrittr吧
作者: sinclairJ (KEEP MOVING FORWARD)   2015-11-19 18:20:00
另外最後一行的存檔路徑可以做到指定路徑嗎?因為加路徑進去程式會出錯 沒加路徑的話電腦找不到檔案qq好的 感謝前輩
作者: celestialgod (天)   2015-11-19 18:24:00
可以加啊,你應該是哪裡沒弄對吧

Links booklink

Contact Us: admin [ a t ] ucptt.com