1

サブセット引数を指定してdcastを使用すると、元のデータフレームの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は、drop = FALSE条件をスキップすることでエラーを回避できることを示していますが、目的の出力は次のとおりです。

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

どんな助けでも素晴らしいでしょう!:)

ありがとう

4

1 に答える 1

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 ステートメントを追加すると、何が起こっているかがわかります。

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
于 2011-03-16T23:01:27.550 に答える