[问题] data.frame以row counts切割的问题

楼主: nelsonlibra (Nelson C.')   2015-06-09 22:28:41
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
收案资料约每个月需要做一次clean data的工作:
变项共有15个(含一项中文字串资料)。
个案数每个月约1000-3000不等。
程式功能需求
由于整理完的资料需要上传特定系统,但系统每次只能吃1000笔个案数,
因此须将清过的资料每1000笔切割到一个独立的CSV档(含字段名称),
并命名第x个切割出的CSV档为“G[x]_系统日期”的(西元年)格式。
特殊内容
但因为每个月的个案数不一定,需要程式能够自行判断即使最后一份
切割出的个案数列数不满1000笔,仍产出一个CSV档。
[程式范例]:
目前已经完成档案命名的产出设定:
CSVCoNaming <-if (nrow(G_Part_Co)%/%1000<= 0) {
paste("G_",format(Sys.Date(),"%Y%m%d"),sep="")
} else {
paste("G",(1:(nrow(G_Part_Co)%/%1000+1)),"_",
format(Sys.Date(),"%Y%m%d"),sep="")
}
CSVFoNaming <-if ((nrow(G_Part_Fo)%/%1000)<= 0) {
paste("G_follow_",format(Sys.Date(),"%Y%m%d"),sep="")
} else {
paste("G",(1:(nrow(G_Part_Fo)%/%1000+1)),"follow_",
format(Sys.Date(),"%Y%m%d"),sep="")
}
剩下切割资料并命名CSV档的功能写不出来...
目前是想用split或subset切资料,再把切出来的用assign给已产出的档名。
但由于需要动态查询该月的个案数来写功能,这部分需要请大家帮帮忙!
[关键字]:切割资料by资料列数
小弟刚从SAS跳槽,对R的语法还掌握不够,麻烦各位大大提供解套方法!
先谢谢大家!!
楼主: nelsonlibra (Nelson C.')   2015-06-09 22:33:00
补充一下,资料档用read.xlsx的方式汇入成data.frame
作者: celestialgod (天)   2015-06-09 23:04:00
直接新增变量 rowindex=1:nrow 然后再新增 g=round((rowindex-1)/1000), 再用split切割, 然后lapplywrite.csv汇入应该可以用list.files做吧
作者: Wush978 (拒看低质媒体)   2015-06-09 23:41:00
利用for loop/while loop 搭配data.frame subsetting
作者: gsuper (Logit(odds))   2015-06-10 10:18:00
linux OS 还是 windows?档案列数 <- system("wc -l 档案",intern=TRUE)LOOP <- ceiling(档案列数 / 1000)for(g in 1:LOOP){tmp<-read.table(档案,skip=1000*(g-1),nrow=1000)}
楼主: nelsonlibra (Nelson C.')   2015-06-10 17:45:00
OS是Windows谢谢大大的方法!! 还在试着写看看用loop怎么写出来。我需要统整一下,我在汇入raw data的时候,就应该用list.files来做,然后把我产出档名的方式先跑出来。接着增加rowindex跟group的两个的向量接着用rowindex跟group这两个list,跟档名的list当作for loop的参数来自动产出我要的csv档吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com