我有以下表格的数据:
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_2001,PRINCIPAL_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知道这里可能出了什么问题吗?我也失去了一个观察,当我试图使它恢复正常,出于某种原因.
发布于 2014-05-06 17:23:03
这里有一个使用基R的reshape函数的解决方案,并应用于@MrFlick的示例数据。这就避免了首先将数据melt并将其dcast以获得“宽”格式的情况。
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函数。
发布于 2014-05-06 16:39:00
好吧,使用这个示例data.frame
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
)我想你会发现
library(reshape2)
data2m <- melt(data2, id=c("brt_id","ADDRESS","OWNERNAME","year"))
data2c <- dcast(data2m, brt_id+ADDRESS+OWNERNAME+year~...)将产生原始的data.frame。这个想法是,尽管地址和所有者名称不一定是密钥的一部分,但您希望将它们作为密钥来对待,这样它们就不会被融化。
最后,要想按年将其扩展到您希望的范围,请使用
dcast(data2m, brt_id+ADDRESS+OWNERNAME~...)https://stackoverflow.com/questions/23499879
复制相似问题