R reshape包:“Dim(x)中的错误”......“dims [product 100]与object [109]的长度不匹配”

时间:2011-06-06 18:15:47

标签: r reshape

我认为使用重塑包后我认为是一个相对良性的重塑。我有“熔化”的数据,如下所示:

> head(meltDf)
    CITY       DATE       variable value
1 Anqing 1953-01-01 DAILY_MAX_TEMP   9.1
2 Anqing 1953-01-02 DAILY_MAX_TEMP   5.1
3 Anqing 1953-01-03 DAILY_MAX_TEMP   5.2
4 Anqing 1953-01-04 DAILY_MAX_TEMP   4.6
5 Anqing 1953-01-05 DAILY_MAX_TEMP   7.9
6 Anqing 1953-01-06 DAILY_MAX_TEMP   9.9
> str(meltDf)
'data.frame':   100 obs. of  4 variables:
 $ CITY    : chr  "Anqing" "Anqing" "Anqing" "Anqing" ...
 $ DATE    : POSIXlt, format: "1953-01-01" "1953-01-02" "1953-01-03" "1953-01-04" ...
 $ variable: Factor w/ 1 level "DAILY_MAX_TEMP": 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  9.1 5.1 5.2 4.6 7.9 9.9 8.1 13.3 17.6 17.6 ...

但是当我尝试cast()数据时,我得到了这个错误:

> castDf <- cast( meltDf , DATE + CITY ~ variable)
Error in dim(X) <- c(n, length(X)/n) : 
  dims [product 100] do not match the length of object [109]

这是一些准确再现问题的示例代码。为了使问题简明扼要,我将数据放在github上:

require(RCurl)
require(reshape)
myFile <- getURL("https://raw.github.com/gist/1010735/29ec65a48740ebe512f8af7a124e1e65e91ac054")
temporaryFile <- tempfile()
con <- file(temporaryFile, open = "w")
cat(myFile, file = con) 
close(con)
meltDf <- dget(temporaryFile)
castDf <- cast( meltDf , DATE + CITY ~ variable)

任何想法导致错误的原因是什么?我认为这是一个非常简单的重塑。

1 个答案:

答案 0 :(得分:4)

我不知道导致错误的原因,但以下是您应该如何解决的问题:

  1. 使用reshape2 - 这是一个更新版本也更快。
  2. 使用dcast - reshape2中的强制转换函数,它显式返回data.frame,而不是返回数组的acast
  3. 代码:

    library(reshape2)
    castDf <- dcast( meltDf , DATE + CITY ~ variable)
    castDf
    

    结果:

            DATE   CITY DAILY_MAX_TEMP
    1 1953-01-01 Anqing            9.1
    2 1953-01-02 Anqing            5.1
    3 1953-01-03 Anqing            5.2
    4 1953-01-04 Anqing            4.6
    5 1953-01-05 Anqing            7.9
    6 1953-01-06 Anqing            9.9