2016-02-19 76 views
3

缺少的组合这是我的数据表:r添加在/填充dcast reshape2表

Name.1 <- c(rep("IVa",12),rep("VIa",10),rep("VIIb",3),rep("IVa",5)) 
qrt <- c(rep("Q1",6),rep("Q3",10),rep("Q4",3),rep("Q1",5),rep("Q1",3),rep("Q3",3)) 
variable <- c(rep("wtTonnes",30)) 
value <- c(201:230) 

df <- data.frame(Name.1,qrt,variable,value) 
df1 <- dcast(df, Name.1 ~ qrt, fun.aggregate=sum, value.var="value",margins=TRUE) 

它给了我这样的输出;

Name.1 Q1  Q3 Q4 (all) 
IVa  1674 1944 0  3618 
VIa  663 858 654 2175 
VIIb 672 0  0  672 
(all) 3009 2802 654 6465 

“qrt”值Q1,Q3,Q4代表一年的季度。基本上我希望表中包含缺失的宿舍并填充0.由于每年当我运行脚本时,可能会出现任何宿舍组合的wtTonne值,而且我不想每次都添加硬编码以添加丢失的值。

在这种情况下,我想它看起来像:

Name.1 Q1  Q2 Q3 Q4 (all) 
IVa  1674 0  1944 0  3618 
VIa  663 0  858 654 2175 
VIIb 672 0  0  0  672 
(all) 3009 0  2802 654 6465 

是否有可能一个列表传递给一个表或在任何阶段的原始数据说,我想有哪些列? (即总是存在Q1,Q2,Q3,Q4),如果需要的话,可以使用虚拟值。

回答

3

下应该给你所需要的输出:

df$qrt <- factor(df$qrt, levels = c("Q1", "Q2", "Q3", "Q4")) 
df1 <- dcast(df, Name.1 ~ qrt, fun.aggregate=sum, value.var="value",margins=TRUE, drop = F) 

起初,我告诉Rqrt与相应的级别,包括不发生水平的因素,然后我告诉dcast到避免丢弃未使用的组合。这给出:

Name.1 Q1 Q2 Q3 Q4 (all) 
1 IVa 1674 0 1944 0 3618 
2 VIa 663 0 858 654 2175 
3 VIIb 672 0 0 0 672 
4 (all) 3009 0 2802 654 6465 
+0

谢谢你,这是伟大的:) –

+0

不客气。随时接受答案,以便其他人可以看到问题已得到解决。 – coffeinjunky