2011-03-16 63 views
1

当使用dcast与该亚群的说法,我收到以下错误,当原始数据帧&子集的数据帧上的dcast上dcast不相匹配的行。R:dcast错误使用时,子集 - 不同的行大小

错误data.frame(...,check.names = FALSE): 参数意味着不同的行数:2,3

我已再现与mtcars数据集中的错误。以下是复制代码。

library(reshape2) 

# dataframe 
mtcars2 <- mtcars[, c('vs','am','gear','carb')] 
mtcars2$cars <- row.names(mtcars) 
row.names(mtcars2) <- NULL 
mtcars2$dummyvariable <- 1 

mtcars2.melt <- melt(mtcars2, id=c('cars','vs','am','gear','carb')) 

colnames(mtcars2.melt) 
# [1] "cars"  "vs"  "am"  "gear"  "carb"  "variable" "value" 

dcast(mtcars2.melt, vs ~ am, drop=FALSE, margins=TRUE) 
# Aggregation function missing: defaulting to length 
#  vs 0 1 (all) 
# 1  0 12 6 18 
# 2  1 7 7 14 
# 3 (all) 19 13 32 

cadillac <- subset(mtcars2.melt, regexpr('Cadillac',cars)>0) 
dcast(cadillac, vs ~ am, drop=FALSE, margins=TRUE) 
# Error in data.frame(..., check.names = FALSE) : 
# arguments imply differing number of rows: 2, 3 

dcast(cadillac, vs ~ am, margins=TRUE) 
#  vs 0 (all) 
# 1  0 1  1 
# 2 (all) 1  1 

最后dcast表明,可以通过跳过下降= FALSE条件可避免的错误,但我期望的输出是

vs 0 1 (all) 
1  0 1 0 1 
2  1 0 0 0 
3 (all) 1 0 1 

任何帮助将是巨大的! :)

谢谢

+0

你能提供你的'sessionInfo()'的副本?这段代码对我很好用 – hadley 2011-03-17 12:50:13

+0

@hadley 对不起,引起错误的代码包括dcast中的代码子集,代码为dcast(mtcars2.melt,vs〜am,drop = FALSE,margins = TRUE,subset =。 (regexpr( '凯迪拉克',汽车)> 0)) 使用dummyvariable作为值列:使用value_var重写。 错误data.frame(...,check.names = FALSE): 参数意味着,不同的行数:2,3'code' – user662963 2011-03-17 17:49:50

+0

该代码正常工作对我来说太。 – hadley 2011-03-17 20:17:34

回答

0

有趣的问题!我过去尝试过这种方法,但无法解决问题。基本上我试图使用dcast来导出一系列数据帧(到csv),无论它们如何被子集化,它们将具有相同的尺寸。这样,我就可以在Excel或Powerpoint中将它们连接在一起。

尝试新dcast仍然给我运行上面的编辑的代码后的错误。

> dcast(mtcars2.melt, vs ~ am, drop=FALSE, margins=TRUE, subset=.(regexpr('Cadillac',cars)>0)) 
Error in data.frame(..., check.names = FALSE) : 
    arguments imply differing number of rows: 2, 3 

and looking at my Session 

> sessionInfo() 
R version 2.12.2 (2011-02-25) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

locale: 
[1] C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] plyr_1.4  reshape2_1.1 

loaded via a namespace (and not attached): 
[1] stringr_0.4 tools_2.12.2 

---- 

使用DROP = F和MARGINS = T时发生错误。这个问题的具体原因似乎是在dcast中尝试cbind(res $ labels [[1]],data)。加入一些打印语句里面dcast显示是怎么回事:

print("printing data") 
print(data) 
print("printing res$labels[[1]]") 
print(res$labels[[1]]) 
print("trying cbind(res$labels[[1]], data)") 


[1] "printing data" 
    0 (all) NA 
1 1 NA 1 
2 NA NA NA 
3 1 NA 1 
[1] "printing res$labels[[1]]" 
    vs 
1  0 
2 (all) 
[1] "trying cbind(res$labels[[1]], data)" 
Error in data.frame(..., check.names = FALSE) : 
    arguments imply differing number of rows: 2, 3