Re: [問題] 如何將表格轉換成一行資料

作者: kial (夏澄)   2017-07-22 00:40:14
※ 引述《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()來處理數據。
作者: c9052002 (c9052002)   2017-07-22 21:26:00
謝謝大大的細心教學,我後來安裝還是失敗,礙於時間我找到stack()的函式,就不需要安裝封包即能使用真的很感謝如此詳細解說,對於初學的我有非常大的幫助^^

Links booklink

Contact Us: admin [ a t ] ucptt.com