Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式化R data.frame-将观察列切换为变量,反之亦然?_R_Dataframe_Reshape - Fatal编程技术网

格式化R data.frame-将观察列切换为变量,反之亦然?

格式化R data.frame-将观察列切换为变量,反之亦然?,r,dataframe,reshape,R,Dataframe,Reshape,我的data.frame最初来自一个txt文件。它是以一种相当不方便的形式出现的,在这种情况下,观测值是按年度分配在列上的。在我的分析中,我需要作为回归器的实际变量被分配到一列作为因子。因此,我需要对data.frame进行以下转换: VAR YEAR.1 YEAR.2 YEAR.3 FIRM.1 VAR.1 FV_11.1 FV_11.2 FV_11.3 FIRM.1 VAR.2 FV_12.1 FV_12.2 FV_12.3

我的data.frame最初来自一个txt文件。它是以一种相当不方便的形式出现的,在这种情况下,观测值是按年度分配在列上的。在我的分析中,我需要作为回归器的实际变量被分配到一列作为因子。因此,我需要对data.frame进行以下转换:

         VAR    YEAR.1    YEAR.2    YEAR.3
FIRM.1   VAR.1  FV_11.1   FV_11.2   FV_11.3 
FIRM.1   VAR.2  FV_12.1   FV_12.2   FV_12.3
FIRM.2   VAR.1  FV_21.1   FV_21.2   FV_21.3
FIRM.2   VAR.2  FV_22.1   FV_22.2   FV_22.3
式中,FV_ij.k是公司i变量j在k年的观测值。结果data.frame理想情况下如下所示:

         YEAR    VAR.1    VAR.2
 FIRM.1  YEAR.1  FV_11.1  FV_12.1
 FIRM.1  YEAR.2  FV_11.2  FV_12.2
 FIRM.1  YEAR.3  FV_11.3  FV_12.3
 FIRM.2  YEAR.1  FV_21.1  FV_22.1
 FIRM.2  YEAR.2  FV_21.2  FV_22.2
 FIRM.2  YEAR.3  FV_21.3  FV_22.3     

我有一个想法,如何编码这个,但它是繁琐的。我想知道是否有一些包可以方便地进行这种转换?

我建议从“重塑2”包中选择
melt
dcast
。但首先,这里有一些样本数据:

mydf <- structure(list(FIRM = c("FIRM.1", "FIRM.1", "FIRM.2", "FIRM.2"),
    VAR = c("VAR.1", "VAR.2", "VAR.1", "VAR.2"), YEAR.1 = c("FV_11.1",
    "FV_12.1", "FV_21.1", "FV_22.1"), YEAR.2 = c("FV_11.2", "FV_12.2",
    "FV_21.2", "FV_22.2"), YEAR.3 = c("FV_11.3", "FV_12.3", "FV_21.3",
    "FV_22.3")), .Names = c("FIRM", "VAR", "YEAR.1", "YEAR.2", "YEAR.3"),
    class = "data.frame", row.names = c(NA, -4L))
mydf
#     FIRM   VAR  YEAR.1  YEAR.2  YEAR.3
# 1 FIRM.1 VAR.1 FV_11.1 FV_11.2 FV_11.3
# 2 FIRM.1 VAR.2 FV_12.1 FV_12.2 FV_12.3
# 3 FIRM.2 VAR.1 FV_21.1 FV_21.2 FV_21.3
# 4 FIRM.2 VAR.2 FV_22.1 FV_22.2 FV_22.3
library(reshape2)
mydf$VAR <- gsub("VAR.", "", mydf$VAR)
out <- melt(mydf, id.vars=c("FIRM", "VAR"))
dcast(out, FIRM + variable ~ VAR)
#     FIRM variable       1       2
# 1 FIRM.1   YEAR.1 FV_11.1 FV_12.1
# 2 FIRM.1   YEAR.2 FV_11.2 FV_12.2
# 3 FIRM.1   YEAR.3 FV_11.3 FV_12.3
# 4 FIRM.2   YEAR.1 FV_21.1 FV_22.1
# 5 FIRM.2   YEAR.2 FV_21.2 FV_22.2
# 6 FIRM.2   YEAR.3 FV_21.3 FV_22.3