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