2013-08-24 49 views
1

我有以下的数据帧,这给出了许多标准设置跨列的逻辑响应:ř重塑宽的数据长

structure(list(Householdref = c("003015002024001", "003016003006001", 
"003016004013001", "003016006002001", "003017003009002", "003017003009003", 
"003017003009004", "003017003037001", "003017003049001", "003070001026001", 
"003070003042001", "003070005002001", "003070005021001", "003070009005001", 
"003071002055001", "003071003037001", "003072003029001", "003072006002001", 
"003072006018001"), B5_Glass = c(FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), B5_Glass.bottles = c(TRUE, 
TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, 
TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), B5_Paper.cardboard = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE 
), B5_Metal.cans = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, 
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, TRUE), B5_Food.biodegradables = c(FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), B5_Plastic.polybags = c(TRUE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE 
), B5_Plastic.bottles.containers = c(FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, 
FALSE, TRUE, FALSE, FALSE, FALSE), B5_other = c(FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE)), .Names = c("Householdref", 
"B5_Glass", "B5_Glass.bottles", "B5_Paper.cardboard", "B5_Metal.cans", 
"B5_Food.biodegradables", "B5_Plastic.polybags", "B5_Plastic.bottles.containers", 
"B5_other"), row.names = c("13", "21", "25", "29", "55", "56", 
"57", "60", "61", "69", "76", "81", "83", "90", "101", "108", 
"120", "125", "127"), class = "data.frame") 

我需要重塑此数据,使我刚才三列:Householdref, TRUE and FALSE,以便列的名称现在出现在TRUE或FALSE列中,以便每个Householdref将有多行。

我一直在尝试reshape()如下:

reshape(ar_waste_sep, direction="long", varying=2:9, sep=c("_")) 

但这样结束了:

        Householdref      time B5 id 
1.Glass      003015002024001      Glass FALSE 1 
2.Glass      003016003006001      Glass FALSE 2 
3.Glass      003016004013001      Glass FALSE 3 
4.Glass      003016006002001      Glass FALSE 4 
5.Glass      003017003009002      Glass FALSE 5 
6.Glass      003017003009003      Glass FALSE 6 
7.Glass      003017003009004      Glass FALSE 7 
8.Glass      003017003037001      Glass FALSE 8 
9.Glass      003017003049001      Glass FALSE 9 
10.Glass      003070001026001      Glass FALSE 10 
11.Glass      003070003042001      Glass FALSE 11 
12.Glass      003070005002001      Glass FALSE 12 

因此,大家可以看到不太我后。我已经搜索了一个例子,可以告诉我如何做我想做的事情,并且确信它不是太复杂,但我只是绕着圈子走。会有人知道一个快速简便的方法来达到我想要IE这是什么:提前

Householdref      TRUE   FALSE 
003015002024001      Glass   NA 
003015002024001      Glass.bottles NA 
003015002024001      NA    Paper.cardboard 
003015002024001      NA    Metal.cans 
003015002024001      NA    Plastic.bottles 
003015002024001      NA    Plastic 
003017003009004      GLass   NA 
003017003009004      NA    Glass.bottles     
003017003009004      Paper.cardboardNA 

感谢,

马蒂

回答

0

您可以使用meltdcast从“reshape2”得到(什么我想)你想要:

library(reshape2) 
mydf <- melt(ar_waste_sep, id.vars="Householdref") 
head(mydf) 
#  Householdref variable value 
# 1 003015002024001 B5_Glass FALSE 
# 2 003016003006001 B5_Glass FALSE 
# 3 003016004013001 B5_Glass FALSE 
# 4 003016006002001 B5_Glass FALSE 
# 5 003017003009002 B5_Glass FALSE 
# 6 003017003009003 B5_Glass FALSE 
out <- dcast(mydf, Householdref + variable ~ value, value.var="variable") 
head(out) 
#  Householdref    variable     FALSE    TRUE 
# 1 003015002024001    B5_Glass    B5_Glass    <NA> 
# 2 003015002024001  B5_Glass.bottles     <NA> B5_Glass.bottles 
# 3 003015002024001  B5_Paper.cardboard  B5_Paper.cardboard    <NA> 
# 4 003015002024001   B5_Metal.cans     <NA>  B5_Metal.cans 
# 5 003015002024001 B5_Food.biodegradables B5_Food.biodegradables    <NA> 
# 6 003015002024001 B5_Plastic.polybags     <NA> B5_Plastic.polybags