R中的面板数据形成
Panel Data formation in R
我有一个包含大量公司的数据集。对于每家公司,我估计了一段时间内每个月的衡量标准,即一年。但是现在我想将这个数据集重组为面板数据。下面我举例说明我的数据集。
Month Beta A B
Jan-05 Beta1 1 32
Jan-05 Beta2 2 32
Jan-05 Beta3 3 32
Jan-05 Beta4 4 32
Jan-05 Beta5 5 32
Jan-05 Beta6 6 32
Feb-05 Beta1 7 32
Feb-05 Beta2 8 32
Feb-05 Beta3 9 32
Feb-05 Beta4 10 32
Feb-05 Beta5 11 32
Feb-05 Beta6 12 32
Mar-05 Beta1 13 32
Mar-05 Beta2 14 32
Mar-05 Beta3 15 32
Mar-05 Beta4 16 32
Mar-05 Beta5 17 32
Mar-05 Beta6 18 32
Apr-05 Beta1 19 32
Apr-05 Beta2 20 32
Apr-05 Beta3 21 32
Apr-05 Beta4 22 32
Apr-05 Beta5 23 32
Apr-05 Beta6 24 32
May-05 Beta1 25 32
May-05 Beta2 26 32
May-05 Beta3 27 32
May-05 Beta4 28 32
May-05 Beta5 29 32
May-05 Beta6 30 32
Jun-05 Beta1 31 32
Jun-05 Beta2 32 32
Jun-05 Beta3 33 32
Jun-05 Beta4 34 32
Jun-05 Beta5 35 32
Jun-05 Beta6 36 32
Jul-05 Beta1 37 32
Jul-05 Beta2 38 32
Jul-05 Beta3 39 32
Jul-05 Beta4 40 32
Jul-05 Beta5 41 32
Jul-05 Beta6 42 32
Aug-05 Beta1 43 32
Aug-05 Beta2 44 32
Aug-05 Beta3 45 32
Aug-05 Beta4 46 32
Aug-05 Beta5 47 32
Aug-05 Beta6 48 32
Sep-05 Beta1 49 32
Sep-05 Beta2 50 32
Sep-05 Beta3 51 32
Sep-05 Beta4 52 32
Sep-05 Beta5 53 32
Sep-05 Beta6 54 32
Oct-05 Beta1 55 32
Oct-05 Beta2 56 32
Oct-05 Beta3 57 32
Oct-05 Beta4 58 32
Oct-05 Beta5 59 32
Oct-05 Beta6 60 32
Nov-05 Beta1 61 32
Nov-05 Beta2 62 32
Nov-05 Beta3 63 32
Nov-05 Beta4 64 32
Nov-05 Beta5 65 32
Nov-05 Beta6 66 32
Dec-05 Beta1 67 32
Dec-05 Beta2 68 32
Dec-05 Beta3 69 32
Dec-05 Beta4 70 32
Dec-05 Beta5 71 32
Dec-05 Beta6 72 32
可以看出,每个月都计算了六个单独的度量 Beta1、Beta2、Beta3、Beta4、Beta5 和 Beta6。现在我想将其重塑如下
Month Company Beta1 Beta2 Beta3 Beta4 Beta5 Beta6
Jan-05 A 1 2 3 4 5 6
Feb-05 A 7 8 9 10 11 12
Mar-05 A 13 14 15 16 17 18
Apr-05 A 19 20 21 22 23 24
May-05 A 25 26 27 28 29 30
Jun-05 A 31 32 33 34 35 36
Jul-05 A 37 38 39 40 41 42
Aug-05 A 43 44 45 46 47 48
Sep-05 A 49 50 51 52 53 54
Oct-05 A 56 57 58 59 60 61
Nov-05 A 62 63 64 65 66 67
Dec-05 A 68 69 70 71 72 73
Jan-05 B 32 32 32 32 32 32
Feb-05 B 32 32 32 32 32 32
Mar-05 B 32 32 32 32 32 32
Apr-05 B 32 32 32 32 32 32
May-05 B 32 32 32 32 32 32
Jun-05 B 32 32 32 32 32 32
Jul-05 B 32 32 32 32 32 32
Aug-05 B 32 32 32 32 32 32
Sep-05 B 32 32 32 32 32 32
Oct-05 B 32 32 32 32 32 32
Nov-05 B 32 32 32 32 32 32
Dec-05 B 32 32 32 32 32 32
我的原始数据集有一千多列。我提到了 enter link description here 但我的数据集与这个不同。非常感谢您在这方面的帮助。
这是经典recast
。 id.var
参数转到 melt
,其他参数转到 dcast
。
第一个函数 melt
生成一个由 id.var=c("Month", "Beta")
指定的长数据帧。因此,输出会将 "A" 和 "B" 列合并到名为 variable
的列中,并创建一个单独的 value
列。有了那个融化的 data.frame
,我们就可以用 dcast
投宽了。公式 Month+variable ~ Beta
在波浪号 (~
) 的左侧有 id 变量,在右侧有 measure 变量。为方便起见,这两个功能合并在 recast
中。
如果顺序很重要,请将月份列转换为日期并在最后排序:
library(zoo)
library(reshape2)
df[,1] <- as.yearmon(df[,1], "%b-%y")
newdf <- recast(df, id.var=c("Month", "Beta"), Month+variable~Beta, value.var="value")
newdf <- newdf[order(newdf$variable,newdf$Month),]
newdf[,1] <- format(newdf$Month, "%b-%y")
newdf
# Month variable Beta1 Beta2 Beta3 Beta4 Beta5 Beta6
# 1 Jan-05 A 1 2 3 4 5 6
# 3 Feb-05 A 7 8 9 10 11 12
# 5 Mar-05 A 13 14 15 16 17 18
# 7 Apr-05 A 19 20 21 22 23 24
# 9 May-05 A 25 26 27 28 29 30
# 11 Jun-05 A 31 32 33 34 35 36
# 13 Jul-05 A 37 38 39 40 41 42
# 15 Aug-05 A 43 44 45 46 47 48
# 17 Sep-05 A 49 50 51 52 53 54
# 19 Oct-05 A 55 56 57 58 59 60
# 21 Nov-05 A 61 62 63 64 65 66
# 23 Dec-05 A 67 68 69 70 71 72
# 2 Jan-05 B 32 32 32 32 32 32
# 4 Feb-05 B 32 32 32 32 32 32
# 6 Mar-05 B 32 32 32 32 32 32
# 8 Apr-05 B 32 32 32 32 32 32
# 10 May-05 B 32 32 32 32 32 32
# 12 Jun-05 B 32 32 32 32 32 32
# 14 Jul-05 B 32 32 32 32 32 32
# 16 Aug-05 B 32 32 32 32 32 32
# 18 Sep-05 B 32 32 32 32 32 32
# 20 Oct-05 B 32 32 32 32 32 32
# 22 Nov-05 B 32 32 32 32 32 32
# 24 Dec-05 B 32 32 32 32 32 32
使用包 {tidyr} 中的函数:
df <- data.frame(Month = c(rep("Jan-05", 6), rep("Feb-05",6)),
Beta = c(paste0("Beta",1:6), paste0("Beta",1:6)),
A = 1:12,
B=rep(32,12))
df2 <- tidyr::gather(df, key = Company, value = val, A, B)
df3 <- tidyr::spread(data = df2, key = Beta, value = val)
## Month Company Beta1 Beta2 Beta3 Beta4 Beta5 Beta6
##1 Feb-05 A 7 8 9 10 11 12
##2 Feb-05 B 32 32 32 32 32 32
##3 Jan-05 A 1 2 3 4 5 6
##4 Jan-05 B 32 32 32 32 32 32
您可以在在线提供的 Reshape pdf 中找到相同的答案。
请通过此 link.
https://cran.r-project.org/web/packages/reshape/reshape.pdf
https://cran.r-project.org/web/packages/reshape2/reshape2.pdf
# This is an example.
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
cast(aqm, day ~ month ~ variable)
# Not only sorting there are many other possiblities.
cast(aqm, month ~ variable, mean)
cast(aqm, month ~ . | variable, mean)
cast(aqm, month ~ variable, mean, margins=c("grand_row", "grand_col"))
cast(aqm, day ~ month, mean, subset=variable=="ozone")
cast(aqm, month ~ variable, range)
cast(aqm, month ~ variable + result_variable, range)
cast(aqm, variable ~ month ~ result_variable,range)
如果您按照所有示例进行操作,就会找到答案。 Reshape 是一个方便的包。
希望这对你有帮助。
我有一个包含大量公司的数据集。对于每家公司,我估计了一段时间内每个月的衡量标准,即一年。但是现在我想将这个数据集重组为面板数据。下面我举例说明我的数据集。
Month Beta A B
Jan-05 Beta1 1 32
Jan-05 Beta2 2 32
Jan-05 Beta3 3 32
Jan-05 Beta4 4 32
Jan-05 Beta5 5 32
Jan-05 Beta6 6 32
Feb-05 Beta1 7 32
Feb-05 Beta2 8 32
Feb-05 Beta3 9 32
Feb-05 Beta4 10 32
Feb-05 Beta5 11 32
Feb-05 Beta6 12 32
Mar-05 Beta1 13 32
Mar-05 Beta2 14 32
Mar-05 Beta3 15 32
Mar-05 Beta4 16 32
Mar-05 Beta5 17 32
Mar-05 Beta6 18 32
Apr-05 Beta1 19 32
Apr-05 Beta2 20 32
Apr-05 Beta3 21 32
Apr-05 Beta4 22 32
Apr-05 Beta5 23 32
Apr-05 Beta6 24 32
May-05 Beta1 25 32
May-05 Beta2 26 32
May-05 Beta3 27 32
May-05 Beta4 28 32
May-05 Beta5 29 32
May-05 Beta6 30 32
Jun-05 Beta1 31 32
Jun-05 Beta2 32 32
Jun-05 Beta3 33 32
Jun-05 Beta4 34 32
Jun-05 Beta5 35 32
Jun-05 Beta6 36 32
Jul-05 Beta1 37 32
Jul-05 Beta2 38 32
Jul-05 Beta3 39 32
Jul-05 Beta4 40 32
Jul-05 Beta5 41 32
Jul-05 Beta6 42 32
Aug-05 Beta1 43 32
Aug-05 Beta2 44 32
Aug-05 Beta3 45 32
Aug-05 Beta4 46 32
Aug-05 Beta5 47 32
Aug-05 Beta6 48 32
Sep-05 Beta1 49 32
Sep-05 Beta2 50 32
Sep-05 Beta3 51 32
Sep-05 Beta4 52 32
Sep-05 Beta5 53 32
Sep-05 Beta6 54 32
Oct-05 Beta1 55 32
Oct-05 Beta2 56 32
Oct-05 Beta3 57 32
Oct-05 Beta4 58 32
Oct-05 Beta5 59 32
Oct-05 Beta6 60 32
Nov-05 Beta1 61 32
Nov-05 Beta2 62 32
Nov-05 Beta3 63 32
Nov-05 Beta4 64 32
Nov-05 Beta5 65 32
Nov-05 Beta6 66 32
Dec-05 Beta1 67 32
Dec-05 Beta2 68 32
Dec-05 Beta3 69 32
Dec-05 Beta4 70 32
Dec-05 Beta5 71 32
Dec-05 Beta6 72 32
可以看出,每个月都计算了六个单独的度量 Beta1、Beta2、Beta3、Beta4、Beta5 和 Beta6。现在我想将其重塑如下
Month Company Beta1 Beta2 Beta3 Beta4 Beta5 Beta6
Jan-05 A 1 2 3 4 5 6
Feb-05 A 7 8 9 10 11 12
Mar-05 A 13 14 15 16 17 18
Apr-05 A 19 20 21 22 23 24
May-05 A 25 26 27 28 29 30
Jun-05 A 31 32 33 34 35 36
Jul-05 A 37 38 39 40 41 42
Aug-05 A 43 44 45 46 47 48
Sep-05 A 49 50 51 52 53 54
Oct-05 A 56 57 58 59 60 61
Nov-05 A 62 63 64 65 66 67
Dec-05 A 68 69 70 71 72 73
Jan-05 B 32 32 32 32 32 32
Feb-05 B 32 32 32 32 32 32
Mar-05 B 32 32 32 32 32 32
Apr-05 B 32 32 32 32 32 32
May-05 B 32 32 32 32 32 32
Jun-05 B 32 32 32 32 32 32
Jul-05 B 32 32 32 32 32 32
Aug-05 B 32 32 32 32 32 32
Sep-05 B 32 32 32 32 32 32
Oct-05 B 32 32 32 32 32 32
Nov-05 B 32 32 32 32 32 32
Dec-05 B 32 32 32 32 32 32
我的原始数据集有一千多列。我提到了 enter link description here 但我的数据集与这个不同。非常感谢您在这方面的帮助。
这是经典recast
。 id.var
参数转到 melt
,其他参数转到 dcast
。
第一个函数 melt
生成一个由 id.var=c("Month", "Beta")
指定的长数据帧。因此,输出会将 "A" 和 "B" 列合并到名为 variable
的列中,并创建一个单独的 value
列。有了那个融化的 data.frame
,我们就可以用 dcast
投宽了。公式 Month+variable ~ Beta
在波浪号 (~
) 的左侧有 id 变量,在右侧有 measure 变量。为方便起见,这两个功能合并在 recast
中。
如果顺序很重要,请将月份列转换为日期并在最后排序:
library(zoo)
library(reshape2)
df[,1] <- as.yearmon(df[,1], "%b-%y")
newdf <- recast(df, id.var=c("Month", "Beta"), Month+variable~Beta, value.var="value")
newdf <- newdf[order(newdf$variable,newdf$Month),]
newdf[,1] <- format(newdf$Month, "%b-%y")
newdf
# Month variable Beta1 Beta2 Beta3 Beta4 Beta5 Beta6
# 1 Jan-05 A 1 2 3 4 5 6
# 3 Feb-05 A 7 8 9 10 11 12
# 5 Mar-05 A 13 14 15 16 17 18
# 7 Apr-05 A 19 20 21 22 23 24
# 9 May-05 A 25 26 27 28 29 30
# 11 Jun-05 A 31 32 33 34 35 36
# 13 Jul-05 A 37 38 39 40 41 42
# 15 Aug-05 A 43 44 45 46 47 48
# 17 Sep-05 A 49 50 51 52 53 54
# 19 Oct-05 A 55 56 57 58 59 60
# 21 Nov-05 A 61 62 63 64 65 66
# 23 Dec-05 A 67 68 69 70 71 72
# 2 Jan-05 B 32 32 32 32 32 32
# 4 Feb-05 B 32 32 32 32 32 32
# 6 Mar-05 B 32 32 32 32 32 32
# 8 Apr-05 B 32 32 32 32 32 32
# 10 May-05 B 32 32 32 32 32 32
# 12 Jun-05 B 32 32 32 32 32 32
# 14 Jul-05 B 32 32 32 32 32 32
# 16 Aug-05 B 32 32 32 32 32 32
# 18 Sep-05 B 32 32 32 32 32 32
# 20 Oct-05 B 32 32 32 32 32 32
# 22 Nov-05 B 32 32 32 32 32 32
# 24 Dec-05 B 32 32 32 32 32 32
使用包 {tidyr} 中的函数:
df <- data.frame(Month = c(rep("Jan-05", 6), rep("Feb-05",6)),
Beta = c(paste0("Beta",1:6), paste0("Beta",1:6)),
A = 1:12,
B=rep(32,12))
df2 <- tidyr::gather(df, key = Company, value = val, A, B)
df3 <- tidyr::spread(data = df2, key = Beta, value = val)
## Month Company Beta1 Beta2 Beta3 Beta4 Beta5 Beta6
##1 Feb-05 A 7 8 9 10 11 12
##2 Feb-05 B 32 32 32 32 32 32
##3 Jan-05 A 1 2 3 4 5 6
##4 Jan-05 B 32 32 32 32 32 32
您可以在在线提供的 Reshape pdf 中找到相同的答案。
请通过此 link.
https://cran.r-project.org/web/packages/reshape/reshape.pdf
https://cran.r-project.org/web/packages/reshape2/reshape2.pdf
# This is an example.
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
cast(aqm, day ~ month ~ variable)
# Not only sorting there are many other possiblities.
cast(aqm, month ~ variable, mean)
cast(aqm, month ~ . | variable, mean)
cast(aqm, month ~ variable, mean, margins=c("grand_row", "grand_col"))
cast(aqm, day ~ month, mean, subset=variable=="ozone")
cast(aqm, month ~ variable, range)
cast(aqm, month ~ variable + result_variable, range)
cast(aqm, variable ~ month ~ result_variable,range)
如果您按照所有示例进行操作,就会找到答案。 Reshape 是一个方便的包。 希望这对你有帮助。