Re: [问题] 想连续处理多个column by factor

楼主: diplazium (diplazium)   2013-10-24 13:13:36
我完全是依照你给的"程式范例",修改成带有简单循环的function:
#我假设:1.你已把10年份的资料都汇入R(year1,year2,...)
2."程式范例"可以正确地做出你想要的结果
#开始吧!
wish <- function(productname="Product1", monthname="July")
{
#挑选想看的产品资料并依月分做切割
year1.Product = split(year1[,productname] , year1[,Month])
year2.Product = split(year2[,productname] , year[,Month])
.
.
.
year10.Product = split(year10[,productname] , year10[,Month])
#挑出某一月份的销售数字
year1ProductMonth =year1.Product[[monthname]]
year2ProductMonth =year2.Product[[monthname]]
.
.
.
year10ProductMonth =year10.Product[[monthname]]
#存成dataframe后输出到csv
ProductMonth = data.frame(year1ProductMonth, year2ProductMonth, ...,
year10ProductMonth)
return(ProductMonth)
}
#之后你再自己看要不要write.csv汇出吧!
如果要再"优化"的话,就得更加了解你想要得到什么结果
以及资料取得的方式...etc. 就先这样子吧~
※ 引述《peiwinds (Macchiato Caramel)》之铭言:
: [问题类型]:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
:
: [软件熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: hi大家好
: 我现在有10个档案,档名是 Sale1~10.csv
: 10个档案代表1~10年的销售资料
: column都是一些产品名称
: row是月份
: 现在我想要把固定一个产品的某个月份,观看十年来的差异
: 本来我用了split函数就能捞到我想看的10年的<产品+月份>
: 然后产生一个CSV档,我再用EXCEL拉出趋势图看 (EXCEL颜色比较漂亮Q_Q)
: 但是我主管想要自己去挑选<产品+月份>的组合自己跑R来看资料
: 我就必须要把程式写得比较弹性让他自行输入产品跟月份
: 最后一样只要产生一个CSV档给他自己拉趋势图看就好
: [程式范例]:
: #读档
: year1 <- read.csv("D:/year1.csv")
: year2 <- read.csv("D:/year2.csv")
: year3 <- read.csv("D:/year3.csv")
: year4 <- read.csv("D:/year4.csv")
: year5 <- read.csv("D:/year5.csv")
: year6 <- read.csv("D:/year6.csv")
: year7 <- read.csv("D:/year7.csv")
: year8 <- read.csv("D:/year8.csv")
: year9 <- read.csv("D:/year9.csv")
: year10 <- read.csv("D:/year10.csv")
: #挑选想看的产品资料并依月分做切割
: year1.Product1 = split(year1$Product1 , year1$Month)
: year2.Product1 = split(year2$Product1 , year2$Month)
: year3.Product1 = split(year3$Product1 , year3$Month)
: year4.Product1 = split(year4$Product1 , year4$Month)
: year5.Product1 = split(year5$Product1 , year5$Month)
: year6.Product1 = split(year6$Product1 , year6$Month)
: year7.Product1 = split(year7$Product1 , year7$Month)
: year8.Product1 = split(year8$Product1 , year8$Month)
: year9.Product1 = split(year9$Product1 , year9$Month)
: year10.Product1 = split(year10$Product1 , year10$Month)
: #挑出Product1在十年来July销售量
: year1Product1July =year1.Product1$"July"
: year2Product1July =year2.Product1$"July"
: year3Product1July =year3.Product1$"July"
: year4Product1July =year4.Product1$"July"
: year5Product1July =year5.Product1$"July"
: year6Product1July =year6.Product1$"July"
: year7Product1July =year7.Product1$"July"
: year8Product1July =year8.Product1$"July"
: year9Product1July =year9.Product1$"July"
: year10Product1July =year10.Product1$"July"
: #存成dataframe后输出到csv
: Product1July =
: data.frame(year1Product1July,year2Product1July,year3Product1July,
: year4Product1July,year5Product1July,year6Product1July,year7Product1July,
: year8Product1July,year9Product1July,year10Product1July)
: write.csv(Product1July, file="D:/Product1July.csv")
: 我尝试着先以 #挑选想看的产品资料并依月分做切割
: 写了for循环搭配paste结果失败了
: Product = "Product1" #可自行输入产品编号
: Month = "July" #可指定月份
: for(i in 1:10){
: x = paste("year",i,Product,sep="");
: y = paste("year",i,"$",Product,sep="");
: z = paste("year",i,"$",Month,sep="");
: x = split(y,z);
: }
: 请问我上面程式要怎么修改才能让做到像上面那些指令的结果呢
: 感觉是split认为paste出来的东西不是object
: 我想要把上面这些写死的script写得更弹性简洁一些
: 求高人指点 谢谢
: [关键字]:
:
: 选择性,也许未来有用
:
作者: peiwinds (Macchiato Caramel)   0000-00-00 00:00:00
感谢你 有几个地方想请教 1.在year1ProductMonth =year1.这部分 如果我想要year1ProductMonth的是显示成我实际输入的产品名称跟月份名称 该怎么处理呢? 谢谢或者是说最后写出CSV档时档名是随着"产品""年分"变动也可
楼主: diplazium (diplazium)   0000-00-00 00:00:00
这个要在return之前修改ProductMonth的字段名称:colnames(ProductMonth) <- (栏名1,栏名2,...)
作者: peiwinds (Macchiato Caramel)   0000-00-00 00:00:00
Error in `[.data.frame`(year1, , Month) : object 'Monobject 'Month' not found 出现这个Error了 求解我的Data确实有Month字段 大小写也没错 Q_Q解决上面的问题了 但是最后结果是data frame with 0columns and 0 rows 我再研究看看 Q_Q
楼主: diplazium (diplazium)   0000-00-00 00:00:00
因为我只是提供循环版的"你的code",所以如果原本可以得解的话,按照我的code也应该是OK的我想问题有可能出在于data.frame()里头每一项的vector长度不同(因为一项产品在某一个月份的销售数字有多笔)因为我不了解你的资料,所以只能提供这样的code
作者: peiwinds (Macchiato Caramel)   0000-00-00 00:00:00
感谢你 问题解决了 看来是我后来变量命名规则和原本的csv有相冲才会造成上面的结果~此外 year1[,Month] 改成 year$Month 就没有error了!

Links booklink

Contact Us: admin [ a t ] ucptt.com