在以下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)
我希望能够使用强制转换来重新构造data.frame,以便我在第一列中结束Time,然后在剩余列中结束temp,其中height的值用于定义哪一列每个值都进入。我已经看到重塑的演员被大量使用但如果我尝试
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
我该怎么做才能解决这个问题?
答案 0 :(得分:4)
两点:
关于第一点,请参阅另一个答案。
对于第二点,您可以尝试类似:
cast(Dat3, DateTime ~ height, value = "Temp", fun.aggregate = mean)
(对于上述类似的“reshape2”版本,您将使用dcast(Dat3, DateTime ~ height, value.var="Temp", fun.aggregate=mean)
)
让我们打破这一点(也适用于其他答案)。
cast
(或最好dcast
)您正在使用哪些数据。formula
,用于描述您想要的~
左侧的“固定”列(如ID变量),以及应成为聚合值列名的内容。 / LI>
value
变量(或value.var
中的dcast
)作为要执行聚合的变量。mean
)。我认为在cast
中发生了这种情况,因为formula
的解析方式以及猜测不同变量的方式。在“重塑”中,如果我没记错,如果你仔细查看代码,如果没有指定value
参数,则函数为:
value
参数。data.frame
中最后一个(最右侧)列作为value
列的任何列。formula
中命名 - 就像在您的示例中那样 - 该列不可用于该函数作为value
的值参数,所以你得到这个错误。关于最后一点,“reshape2”没有这个问题,你可以重复使用多个参数的变量。
要自行查看代码,请在提示符处输入cast
和reshape1
,然后在提示符处加载“reshape”,并在提示符处输入dcast
和reshape2:::cast
reshape2“包加载。你可能需要进一步挖掘,因为这两个都使用了Hadley作为包的一部分写的一些其他函数。
答案 1 :(得分: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