重塑问题-数据在过程中被破坏

迈克尔·奇里科

我有以下形式的数据:

    brt_id          ADDRESS             OWNERNAME year PRINCIPAL INTEREST PENALTY OTHER        TOTAL LIEN STATUS
1 11000600 00108 WHARTON ST PRUSINOWSKI JOSEPHINE 2001         0        0       0     0     0            
2 11000600 00108 WHARTON ST PRUSINOWSKI JOSEPHINE 2002         0        0       0     0     0            
3 11000600 00108 WHARTON ST PRUSINOWSKI JOSEPHINE 2003         0        0       0     0     0            
4 11000600 00108 WHARTON ST PRUSINOWSKI JOSEPHINE 2004         0        0       0     0     0            
5 11000600 00108 WHARTON ST PRUSINOWSKI JOSEPHINE 2005         0        0       0     0     0            
6 11000600 00108 WHARTON ST PRUSINOWSKI JOSEPHINE 2006         0        0       0     0     0            

我想重塑它“宽一年”(如从STATA类似活动我的直觉),让我得到这样的变量PRINCIPAL_2001PRINCIPAL_2002等等。

但是,当我运行时:

data2m<-melt(data2, id=c("brt_id", "year"))
data2c<-dcast(data2m, brt_id+year~...)

结果数据(应该与原始数据相同)如下所示:

    brt_id year ADDRESS OWNERNAME PRINCIPAL INTEREST PENALTY OTHER TOTAL LIEN STATUS
1 11000600 2001       1         1         1        1       1     1     1    1      1
2 11000600 2002       1         1         1        1       1     1     1    1      1
3 11000600 2003       1         1         1        1       1     1     1    1      1
4 11000600 2004       1         1         1        1       1     1     1    1      1
5 11000600 2005       1         1         1        1       1     1     1    1      1
6 11000600 2006       1         1         1        1       1     1     1    1      1

融化数据时会收到警告消息:

Warning message:
attributes are not identical across measure variables; they will be dropped 

当我强制转换数据时:

Aggregation function missing: defaulting to length

看起来问题在于投放问题,因为可以看一下融化的数据:

            brt_id year variable      value
70000000 621506800 2005     LIEN           
70000001 621506800 2006     LIEN           
70000002 621506800 2007     LIEN           
70000003 621506800 2008     LIEN           
70000004 621506800 2009     LIEN           

如果使用,结果是相似的(尽管更糟)acast

              ADDRESS OWNERNAME PRINCIPAL INTEREST PENALTY OTHER TOTAL LIEN STATUS
11000600_2001       1         1         1        1       1     1     1    1      1
11000600_2002       1         1         1        1       1     1     1    1      1
11000600_2003       1         1         1        1       1     1     1    1      1
11000600_2004       1         1         1        1       1     1     1    1      1
11000600_2005       1         1         1        1       1     1     1    1      1
11000600_2006       1         1         1        1       1     1     1    1      1

知道这里可能出什么问题吗?由于某种原因,当我尝试使其恢复正常时,我也失去了一个观察...

A5C1D2H2I1M1N2O1R2T1

这是一个使用base Rreshape函数并应用于@MrFlick的示例数据的解决方案这避免了必须先将melt数据dcast转换为“宽”格式。

reshape(data2, direction = "wide", 
        idvar = c("brt_id", "ADDRESS", "OWNERNAME"), 
        timevar = "year")

现在,关于您的警告:@MrFlick向您展示了使用“ reshape”包进行此操作的方法(为什么不包含“ reshape2”?最好保持更新!)但是,他并没有在回答中真正解释警告。

第一个警告基本上是告诉您您尝试放入“值”列中的变量(度量变量)是不同的类型(某些可能是字符,其他可能是因素,其他可能是数字)。在这种特殊情况下,“ ADDRESS”和“ OWNERNAME”(因子)与剩余列中的数值一起放入同一列中,因此会出现错误。@MrFlick的建议将那些列视为键,即使它们可能不是键也可以解决问题。

第二个警告是通常在ID组合不唯一时收到的警告。如果您的数据像此处的示例数据一样,并且您遵循@MrFlick的建议,那么您应该可以。否则,您将需要添加另一列以使ID变量唯一,以避免dcast自动将length其用作其fun.aggregate功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章