作者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://webptt.com/cn.aspx?n=bbs/R_Language/M.1500655217.A.C2F.html
※ 编辑: kial (59.115.65.162), 07/22/2017 00:51:19
1F:推 c9052002: 谢谢大大的细心教学,我後来安装还是失败,碍於时间我找到 07/22 21:26
2F:→ c9052002: stack()的函式,就不需要安装封包即能使用 07/22 21:28
3F:→ c9052002: 真的很感谢如此详细解说,对於初学的我有非常大的帮助^^ 07/22 21:29