精華區beta R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 請把以下不需要的部份刪除 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 目前有一個表格內容,但因為需要匯出至其他軟體,因此要變更目前的格式, 原先的表格抬頭為編號,排序分別依照日期由上至下排列, 而希望變更的內容為:排序=日期*編號數量由上至下 原本 1 2 3 4 ...... 1/1 a b c d 1/2 g h i j 1/3 m n o p 1/4 s t u v 希望變更結果 x 1/1 a 1/1 b 1/1 c 1/1 d 1/2 g 1/2 h 1/2 i 1/2 j 1/3 m 1/3 n 1/3 o 1/3 p 1/4 s 1/4 t 1/4 u 1/4 v 不知大大們是否有解,小的以往都是用excel,但要處理的資料量太大了, 希望可以用r來減少人工動作的時間QAQ或是人工動完EXCEL死機的悲劇Orz 感謝 [程式範例]: 目前用以下方法print出來的結果"看起來"是我要的, 但我不知該如何將資料匯出成我要的結果 x=1 while(x<=4) { print(c(表格名稱[x,1:107])) x=x+1 } 至於日期的序列我有另外找到可以生成的方式 c<-rep(seq(as.POSIXct("1990-01-01"), len=9131, by="day"), rep(107, 9131)) data.frame(c)->表格名稱 write.table(表格名稱,file = "匯出名稱", sep = ",") 以上是目前用很笨的方式逐一修改再合併資料。 [環境敘述]: Window 7 ,RStudio介面 [關鍵字]: 更改格式,表格資料轉為單行資料 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.249.143 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1500617592.A.993.html
locka: gather() 07/21 14:19
c9052002: 謝謝大大的關鍵字,讓我找到更切合的melt()#;D 07/21 14:52
locka: yes~ 熟data.table的話melt比較簡潔 :) 07/21 15:07
c9052002: 好怪QQ下載了封包卻無法執行melt,來試試gather(),再謝過 07/21 15:51
> -------------------------------------------------------------------------- < 作者: kial (夏澄) 看板: R_Language 標題: Re: [問題] 如何將表格轉換成一行資料 時間: Sat Jul 22 00:40:14 2017 ※ 引述《c9052002 (c9052002)》之銘言: : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : 請把以下不需要的部份刪除 : 新手(沒寫過程式,R 是我的第一次) : [問題敘述]: : : 目前有一個表格內容,但因為需要匯出至其他軟體,因此要變更目前的格式, : 原先的表格抬頭為編號,排序分別依照日期由上至下排列, : 而希望變更的內容為:排序=日期*編號數量由上至下 : 原本 : 1 2 3 4 ...... : 1/1 a b c d : 1/2 g h i j : 1/3 m n o p : 1/4 s t u v 一步一步來的版本 #製作sample資料 a0 <- c("1/1","1/2","1/3","1/4") a1 <- c("a","g","m","s") a2 <- c("b","h","n","t") a3 <- c("c","i","o","u") a4 <- c("d","j","p","v") #以dataframe形式合併放進data data<-as.data.frame(cbind(a0,a1,a2,a3,a4)) #取名 names(data)<-c("date","1","2","3","4") #看資料 data #==output #date 1 2 3 4 #1 1/1 a b c d #2 1/2 g h i j #3 1/3 m n o p #4 1/4 s t u v #install.packages("reshape2") #載入reshape2包 library(reshape2) #用melt()以date為準將橫資料轉為長資料放進data data <- melt(data,id.vars="date") #留下date和value欄位 data <- as.data.frame(cbind(as.character(data$date),data$value)) #取名 names(data)<-c("date","x") #排序 data<-data[order(data$date),] #看資料 data #==output # date x #1 1/1 a #5 1/1 b #9 1/1 c #13 1/1 d #2 1/2 g #6 1/2 h #10 1/2 i #14 1/2 j #3 1/3 m #7 1/3 n #11 1/3 o #15 1/3 p #4 1/4 s #8 1/4 t #12 1/4 u #16 1/4 v 日期跟欄位的處理主要都是資料型態的問題, 主要是利用reshape2包中的melt()來處理數據。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.65.162 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1500655217.A.C2F.html ※ 編輯: kial (59.115.65.162), 07/22/2017 00:51:19