R: ошибка dcast при использовании подмножества - разные размеры строк - PullRequest
1 голос
/ 16 марта 2011

При использовании 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

Последний дкаст показывает, что ошибки можно избежать, пропустив условие drop = FALSE, но мой желаемый результат -

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

Любая помощь будет отличной!:)

Спасибо

1 Ответ

0 голосов
/ 17 марта 2011

Интересная проблема!Я пытался это в прошлом и не мог решить это.По сути, я пытался использовать 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.И конкретная причина проблемы, по-видимому, заключается в попытке связать (res $ tags [[1]], data) внутри dcast.Добавление некоторых операторов печати в 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
...