R:dcast使用子集时出错-行大小不同
将dcast与subset参数一起使用时,当原始数据帧上的dcast与子集数据帧上的dcast在行中不匹配时,我会得到以下错误 data.frame(…,check.names=FALSE)中出错: 参数表示不同的行数:2,3 我用mtcars数据集再现了错误。下面是代码的复制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
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抱歉,导致错误的代码包含在dcastcode
dcast(mtcars2.melt,vs~am,drop=FALSE,margins=TRUE,subset=(regexpr('Cadillac',cars)>0))中的子集,使用dummyvariable作为值列:使用value_var覆盖。data.frame(…,check.names=FALSE)中出现错误:参数表示行数不同:2,3code
该代码对我也适用。@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