推 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