按R中的因子创建新的日期框
如果我在R中有以下数据帧按R中的因子创建新的日期框,r,time-series,reshape,R,Time Series,Reshape,如果我在R中有以下数据帧 date <- rep(seq(as.Date("2013-11-1"),as.Date("2014-6-1"), by = "months"),2) category <- c(rep("Group 1","8"),rep("Group 2","8")) x <- c(rnorm(8), rnorm(8)) data.frame(date,category,x) date category x 1 2013-1
date <- rep(seq(as.Date("2013-11-1"),as.Date("2014-6-1"), by = "months"),2)
category <- c(rep("Group 1","8"),rep("Group 2","8"))
x <- c(rnorm(8), rnorm(8))
data.frame(date,category,x)
date category x
1 2013-11-01 Group 1 -0.5511129
2 2013-12-01 Group 1 -0.6640636
3 2014-01-01 Group 1 0.6348586
4 2014-02-01 Group 1 0.2673702
5 2014-03-01 Group 1 0.9949441
6 2014-04-01 Group 1 0.4077544
7 2014-05-01 Group 1 1.8395109
8 2014-06-01 Group 1 -0.4685328
9 2013-11-01 Group 2 -0.7624855
10 2013-12-01 Group 2 -1.1774081
11 2014-01-01 Group 2 -2.5409333
12 2014-02-01 Group 2 0.5013774
13 2014-03-01 Group 2 0.6504688
14 2014-04-01 Group 2 0.2582353
15 2014-05-01 Group 2 0.6385828
16 2014-06-01 Group 2 -0.4358158
我想要的是一个跨时间的数据帧,第一列是日期,其余的列对应于不同组的变量x。假设将有更多的组和变量。我希望这是有意义的 这是您的标准票价“长”到“宽”整形问题 查看“重塑2”中的
dcast
:
对于多样性,还有另一种方法:-)
这是您的标准票价“长”到“宽”重塑问题 查看“重塑2”中的
dcast
:
对于多样性,还有另一种方法:-)
嘿,这很好,但是如果我们有更多的变量,比如x.1、x.2、x.3等等,我们如何应用这些工具呢。@MateurDataAnalyst,
重塑
应该是现成的。对于“重塑2”和“tidyr”方法,首先需要将数据转换为“长”形式。在“重塑2”中,术语是melt
,而在“tidyr”中,术语是gather
。嘿,这很好,但是如果我们有更多的变量,如x.1、x.2、x.3等等,我们如何应用这些工具。@MateurdataAnalyst,reformate
应该是现成的。对于“重塑2”和“tidyr”方法,首先需要将数据转换为“长”形式。在“重塑2”中,术语是melt
,而在“tidyr”中,术语是gather
。
date group 1 group 2
1 2013-11-01 -0.5511129g
2 2013-12-01 -0.6640636
3 2014-01-01 0.6348586
4 2014-02-01 0.2673702 group 2 variable x values here
5 2014-03-01 0.9949441
6 2014-04-01 0.4077544
7 2014-05-01 1.8395109
8 2014-06-01 -0.4685328
set.seed(1)
date <- rep(seq(as.Date("2013-11-1"),as.Date("2014-6-1"), by = "months"),2)
category <- c(rep("Group 1","8"),rep("Group 2","8"))
x <- c(rnorm(8), rnorm(8))
mydf <- data.frame(date,category,x)
library(reshape2)
dcast(mydf, date ~ category)
# Using x as value column: use value.var to override.
# date Group 1 Group 2
# 1 2013-11-01 -0.6264538 0.57578135
# 2 2013-12-01 0.1836433 -0.30538839
# 3 2014-01-01 -0.8356286 1.51178117
# 4 2014-02-01 1.5952808 0.38984324
# 5 2014-03-01 0.3295078 -0.62124058
# 6 2014-04-01 -0.8204684 -2.21469989
# 7 2014-05-01 0.4874291 1.12493092
# 8 2014-06-01 0.7383247 -0.04493361
reshape(mydf, direction = "wide", idvar = "date", timevar = "category")
# date x.Group 1 x.Group 2
# 1 2013-11-01 -0.6264538 0.57578135
# 2 2013-12-01 0.1836433 -0.30538839
# 3 2014-01-01 -0.8356286 1.51178117
# 4 2014-02-01 1.5952808 0.38984324
# 5 2014-03-01 0.3295078 -0.62124058
# 6 2014-04-01 -0.8204684 -2.21469989
# 7 2014-05-01 0.4874291 1.12493092
# 8 2014-06-01 0.7383247 -0.04493361
library(dplyr)
library(tidyr)
mydf %>% spread(category, x)