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