我有大量公司的数据集。对于每家公司,我估算了一段时间内每个月的措施,即一年。但现在我想将此数据集重组为面板数据。下面我将说明我拥有的数据集。
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,但我的数据集与此不同。在这方面,我非常感谢你的帮助。
答案 0 :(得分:3)
这是一个经典的recast
。 id.var
参数转到melt
,其他参数转到dcast
。
第一个函数melt
生成一个用id.var=c("Month", "Beta")
指定的长数据帧。因此输出将组合列" A"和" B"在名为variable
的列中,创建单独的value
列。随着融化data.frame
,我们可以使用dcast
进行广泛投射。公式Month+variable ~ Beta
在波浪号(~
)的左侧有id变量,右侧是测量变量。为方便起见,这两个函数组合在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
答案 1 :(得分:1)
使用包{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
答案 2 :(得分:0)
您可以在网上获得的重塑pdf中找到相同的答案。 请仔细阅读此链接 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)
如果您按照所有示例进行操作,则有答案。重塑是方便的包。 愿这对你有帮助。