首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重新塑造的麻烦-在此过程中被破坏的数据。

重新塑造的麻烦-在此过程中被破坏的数据。
EN

Stack Overflow用户
提问于 2014-05-06 16:17:16
回答 2查看 3.7K关注 0票数 1

我有以下表格的数据:

代码语言:javascript
复制
    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            

我想重塑它的“按年宽”(这是我的本能从类似的练习在斯塔塔),以便我得到的变量,如PRINCIPAL_2001PRINCIPAL_2002等。

但是,当我运行时:

代码语言:javascript
复制
data2m<-melt(data2, id=c("brt_id", "year"))
data2c<-dcast(data2m, brt_id+year~...)

生成的数据(应该与原始数据相同)如下:

代码语言:javascript
复制
    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

当我融化数据时,我会收到警告信息:

代码语言:javascript
复制
Warning message:
attributes are not identical across measure variables; they will be dropped 

另一个当我转换数据的时候:

代码语言:javascript
复制
Aggregation function missing: defaulting to length

看起来这个问题就发生在铸造过程中,看一眼熔掉的数据似乎没问题:

代码语言:javascript
复制
            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,结果是相似的(尽管更糟)

代码语言:javascript
复制
              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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-06 17:23:03

这里有一个使用基R的reshape函数的解决方案,并应用于@MrFlick的示例数据。这就避免了首先将数据melt并将其dcast以获得“宽”格式的情况。

代码语言:javascript
复制
reshape(data2, direction = "wide", 
        idvar = c("brt_id", "ADDRESS", "OWNERNAME"), 
        timevar = "year")

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

第一个警告基本上告诉您,您试图在"value“列(度量值变量)中放置的变量是不同的类型(一些可能是字符,另一些可能是因素,另一些可能是数字)。在这个特殊的例子中,"ADDRESS“和"OWNERNAME”(factors)被放入同一个列中,其中包含来自teh剩余列的数值,因此出现了错误。@MrFlick建议将这些列作为键来处理,即使它们可能不是,也可以解决这个问题。

第二个警告是通常在is组合不唯一时得到的警告。如果您的数据与这里的示例数据类似,并且遵循@MrFlick的建议,那么您应该会没事的。否则,您需要添加另一列,以使ID变量成为唯一的,以避免dcast自动使用length作为其fun.aggregate函数。

票数 6
EN

Stack Overflow用户

发布于 2014-05-06 16:39:00

好吧,使用这个示例data.frame

代码语言:javascript
复制
data2<-data.frame(brt_id=11000600, 
    ADDRESS = "00108-WHARTON-ST",
    OWNERNAME = "PRUSINOWSKI-JOSEPHINE",
    year=2001:2006,
    PRINCIPAL =0,
    INTEREST =0,
    PENALTY =0,
    OTHER =0,
    TOTAL.LIEN.STATUS=0
)

我想你会发现

代码语言:javascript
复制
library(reshape2)
data2m <- melt(data2, id=c("brt_id","ADDRESS","OWNERNAME","year"))
data2c <- dcast(data2m, brt_id+ADDRESS+OWNERNAME+year~...)

将产生原始的data.frame。这个想法是,尽管地址和所有者名称不一定是密钥的一部分,但您希望将它们作为密钥来对待,这样它们就不会被融化。

最后,要想按年将其扩展到您希望的范围,请使用

代码语言:javascript
复制
dcast(data2m, brt_id+ADDRESS+OWNERNAME~...)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23499879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档