Re: [問題] 想連續處理多個column by factor

看板R_Language作者 (diplazium)時間11年前 (2013/10/24 13:13), 編輯推噓5(5014)
留言19則, 2人參與, 最新討論串2/4 (看更多)
我完全是依照你給的"程式範例",修改成帶有簡單迴圈的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寫得更彈性簡潔一些 : 求高人指點 謝謝 : [關鍵字]: : : 選擇性,也許未來有用 : -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.175.253

10/24 13:59, , 1F
感謝你 有幾個地方想請教 1.在year1ProductMonth =year1.
10/24 13:59, 1F

10/24 14:00, , 2F
這部分 如果我想要year1ProductMonth的是顯示成我實際
10/24 14:00, 2F

10/24 14:00, , 3F
輸入的產品名稱跟月份名稱 該怎麼處理呢? 謝謝
10/24 14:00, 3F

10/24 14:08, , 4F
或者是說最後寫出CSV檔時檔名是隨著"產品""年分"變動也可
10/24 14:08, 4F

10/24 14:15, , 5F
這個要在return之前修改ProductMonth的欄位名稱:
10/24 14:15, 5F

10/24 14:16, , 6F
colnames(ProductMonth) <- (欄名1,欄名2,...)
10/24 14:16, 6F

10/24 14:48, , 7F
Error in `[.data.frame`(year1, , Month) : object 'Mon
10/24 14:48, 7F

10/24 14:50, , 8F
object 'Month' not found 出現這個Error了 求解
10/24 14:50, 8F

10/24 15:02, , 9F
我的Data確實有Month欄位 大小寫也沒錯 Q_Q
10/24 15:02, 9F

10/24 15:16, , 10F
解決上面的問題了 但是最後結果是data frame with 0
10/24 15:16, 10F

10/24 15:16, , 11F
columns and 0 rows 我再研究看看 Q_Q
10/24 15:16, 11F

10/24 15:37, , 12F
因為我只是提供迴圈版的"你的code",所以如果原本可以得
10/24 15:37, 12F

10/24 15:38, , 13F
解的話,按照我的code也應該是OK的
10/24 15:38, 13F

10/24 15:40, , 14F
我想問題有可能出在於data.frame()裏頭每一項的vector長
10/24 15:40, 14F

10/24 15:41, , 15F
度不同(因為一項產品在某一個月份的銷售數字有多筆)
10/24 15:41, 15F

10/24 15:42, , 16F
因為我不了解你的資料,所以只能提供這樣的code
10/24 15:42, 16F

10/24 15:49, , 17F
感謝你 問題解決了 看來是我後來變數命名規則和原本的csv
10/24 15:49, 17F

10/24 15:49, , 18F
有相衝才會造成上面的結果~
10/24 15:49, 18F

10/24 15:50, , 19F
此外 year1[,Month] 改成 year$Month 就沒有error了!
10/24 15:50, 19F
文章代碼(AID): #1IQAo3E6 (R_Language)
文章代碼(AID): #1IQAo3E6 (R_Language)