R:dcast使用子集时出错-行大小不同

R:dcast使用子集时出错-行大小不同,r,subset,R,Subset,将dcast与subset参数一起使用时,当原始数据帧上的dcast与子集数据帧上的dcast在行中不匹配时,我会得到以下错误 data.frame(…,check.names=FALSE)中出错: 参数表示不同的行数:2,3 我用mtcars数据集再现了错误。下面是代码的复制 library(reshape2) # dataframe mtcars2 <- mtcars[, c('vs','am','gear','carb')] mtcars2$cars <- row.n

将dcast与subset参数一起使用时,当原始数据帧上的dcast与子集数据帧上的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导出一系列数据帧(到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语句可以显示发生了什么:

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

能否提供您的
sessionInfo()
的副本?此代码适用于以下情况:me@hadley抱歉,导致错误的代码包含在dcast
code
dcast(mtcars2.melt,vs~am,drop=FALSE,margins=TRUE,subset=(regexpr('Cadillac',cars)>0))中的子集,使用dummyvariable作为值列:使用value_var覆盖。data.frame(…,check.names=FALSE)中出现错误:参数表示行数不同:2,3
code
该代码对我也适用。@hadley我已多次尝试使用上述dcast with subset来处理此mtcars2数据集,结果相同。不知道我在做什么不同。我的sessionInfo看起来像是
code
R版本2.12.1(2010-12-16)平台:x86_64-apple-darwin9.8.0/x86_64(64位)语言环境:[1]en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8附加基本包:[1]统计图形设备UTIL数据集方法基础其他附加包:[1]plyr_1.4重塑2_1.1通过命名空间加载(未附加):[1]stringr_0.4
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