0

在以下data.frame中

Date1 <- seq(from = as.POSIXct("2010-05-01 02:00"), 
             to = as.POSIXct("2010-05-01 06:00"), by = 3600)
Dat <- data.frame(DateTime = Date1,
                  Temp = rnorm(length(Date1)),
                  height = c(1,2,3,4,5))
Dat2 <- data.frame(DateTime = Date1,
                   Temp = rnorm(length(Date1)),
                   height = c(1,2,3,4,5))

Dat3 <- rbind(Dat,Dat2)

我希望能够使用 cast 来重新构造 data.frame 以便我最终在第一列中使用 Time ,然后在剩余列中使用 temp ,其中 height 的值用于定义每个列中的哪一列价值观进入。我已经看到很多人使用了 cast in reshape 但如果我尝试

require(reshape)
cast(Dat3,Temp ~ height)

我收到一个错误

Using height as value column.  Use the value argument to cast to override this choice
Error in `[.data.frame`(data, , variables, drop = FALSE) : 
  undefined columns selected

我能做些什么来解决这个问题?

4

2 回答 2

4

两点:

  1. 您正在使用已被“reshape2”包替换的旧版本的包。
  2. 如有疑问,请尝试显式命名您的一些函数参数,以帮助了解该函数是如何工作的。

对于第一点,请参阅另一个答案。

对于第二点,您可以尝试以下操作:

cast(Dat3, DateTime ~ height, value = "Temp", fun.aggregate = mean)

(对于上述类似的“reshape2”版本,您可以使用dcast(Dat3, DateTime ~ height, value.var="Temp", fun.aggregate=mean)

让我们分解一下(也适用于其他答案)。

  • 告诉cast(或最好dcast)你正在使用什么数据。
  • 在 左侧指定一个formula描述您想要的“固定”列(如 ID 变量)的~内容,以及应该成为聚合值列名的内容。
  • 指定一个value变量(或一个value.varin dcast)作为要对其执行聚合的变量。
  • 指定您的聚合函数(默认为长度,在我的示例中为mean)。

认为这是cast因为如何formula解析以及如何猜测不同的变量。在“reshape”中,如果我没记错的话,如果你仔细研究代码,如果value没有指定参数,函数:

  • 尝试查找名为“value”的变量,如果找到,则将其用作value参数。
  • 如果没有找到,它使用任何列作为列中的最后(最右边)data.framevalue
  • 如果最后一列碰巧已经在formula--就像在您的示例中一样--该列不可用于用作参数值的value函数,因此您会收到此错误。

关于最后一点,“reshape2”没有这个问题,您可以为多个参数重复使用变量。

要自己查看代码,请在加载了“reshape”包的提示符处键入cast和,并在提示符处加载“reshape2”包。您可能需要进一步挖掘,因为这两个都使用了 Hadley 作为包的一部分编写的一些其他功能。reshape1dcastreshape2:::cast

于 2013-11-14T19:33:01.730 回答
1

编辑:

你可以试试reshape2

require(reshape2)
dcast(Dat3,DateTime ~ height)

我还编辑了您的示例数据以使其清楚,(据我了解)

Date1 <- seq(from = as.POSIXct("2010-05-01 02:00"), 
             to = as.POSIXct("2010-05-01 06:00"), by = 3600)

dat3<-data.frame(DateTime=Date1, Temp=rnorm(25),height=rep(c(1:5), each=5))

数据:

> dat3
              DateTime       temp height
1  2010-05-01 02:00:00 -0.1528124      1
2  2010-05-01 03:00:00 -0.1212748      1
3  2010-05-01 04:00:00 -0.3402005      1
4  2010-05-01 05:00:00 -0.4789695      1
5  2010-05-01 06:00:00  1.0711143      1
6  2010-05-01 02:00:00  0.5340149      2
7  2010-05-01 03:00:00 -0.6660925      2
8  2010-05-01 04:00:00  2.6568830      2
9  2010-05-01 05:00:00 -0.1686520      2
10 2010-05-01 06:00:00  0.5323944      2
11 2010-05-01 02:00:00  1.0419971      3
12 2010-05-01 03:00:00 -1.2008618      3
13 2010-05-01 04:00:00  1.3663645      3
14 2010-05-01 05:00:00 -0.7694349      3
15 2010-05-01 06:00:00  0.6992724      3
16 2010-05-01 02:00:00  1.3105646      4
17 2010-05-01 03:00:00 -0.9245039      4
18 2010-05-01 04:00:00 -1.8716493      4
19 2010-05-01 05:00:00 -1.2540669      4
20 2010-05-01 06:00:00  0.2525718      4
21 2010-05-01 02:00:00 -1.1807661      5
22 2010-05-01 03:00:00 -0.8894825      5
23 2010-05-01 04:00:00 -1.7290931      5
24 2010-05-01 05:00:00 -0.5112744      5
25 2010-05-01 06:00:00 -0.1841737      5

重塑代码

require(reshape2)
dcast(dat3,DateTime ~ height, value.var="Temp")

重塑数据

> dcast(dat3,DateTime ~ height, value.var="Temp")
             DateTime          1          2          3          4          5
1 2010-05-01 02:00:00 -0.1528124  0.5340149  1.0419971  1.3105646 -1.1807661
2 2010-05-01 03:00:00 -0.1212748 -0.6660925 -1.2008618 -0.9245039 -0.8894825
3 2010-05-01 04:00:00 -0.3402005  2.6568830  1.3663645 -1.8716493 -1.7290931
4 2010-05-01 05:00:00 -0.4789695 -0.1686520 -0.7694349 -1.2540669 -0.5112744
5 2010-05-01 06:00:00  1.0711143  0.5323944  0.6992724  0.2525718 -0.1841737
于 2013-11-14T19:23:15.013 回答