我有以下表格的数据:
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_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
知道这里可能出现什么问题吗?在尝试将其恢复正常时,我也失去了一个观察,出于某种原因......
答案 0 :(得分:6)
这是使用基础R reshape
函数的解决方案,并应用于@ MrFlick的示例数据。这样可以避免首先melt
您的数据,dcast
将其放入&#34;范围内&#34;格式。
reshape(data2, direction = "wide",
idvar = c("brt_id", "ADDRESS", "OWNERNAME"),
timevar = "year")
现在,关于你的警告:@MrFlick向你展示了使用&#34; reshape&#34;包(为什么不&#34; reshape2&#34;?最好保持更新!)但是,他并没有在他的回答中解释警告。
第一个警告基本上是告诉你你试图放入&#34;值&#34;的变量。列(度量变量)是不同的类型(一些可能是字符,其他可能是因素,其他可能是数字)。在这种特殊情况下,&#34; ADDRESS&#34;和&#34; OWNERNAME&#34; (因子)与其余列中的数值一起放入同一列,因此出现错误。 @ MrFlick建议将这些列视为键,即使它们可能不会解决 问题。
第二个警告是当ID组合不唯一时通常会收到的警告。如果您的数据与此处的示例数据类似,并且您遵循@ MrFlick的建议,那么您应该没问题。否则,您需要添加另一列以使ID变量唯一,以避免让dcast
自动使用length
作为其fun.aggregate
函数。
答案 1 :(得分:3)
好吧,使用此示例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~...)