作者celestialgod (天)
看板R_Language
标题Re: [问题] 非等长样本拆分
时间Wed Nov 18 11:45:35 2015
用矩阵想一下就可以搞定了~~ 不用想得太复杂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
: 感谢各位前辈指导
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.73.89
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1447818338.A.6DC.html
※ 编辑: celestialgod (140.109.73.89), 11/18/2015 11:56:02
1F:推 sinclairJ: 想请教%>%是什麽样的指令呢?古哥大神不回我qq 11/19 18:12
2F:→ celestialgod: 直接在板上搜寻magrittr吧 11/19 18:13
3F:推 sinclairJ: 另外最後一行的存档路径可以做到指定路径吗?因为加路 11/19 18:20
4F:→ sinclairJ: 径进去程式会出错 没加路径的话电脑找不到档案qq 11/19 18:20
5F:→ sinclairJ: 好的 感谢前辈 11/19 18:21
6F:→ celestialgod: 可以加啊,你应该是哪里没弄对吧 11/19 18:24