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