R 如何使用3列数据框上的强制转换
在下面的data.frame中R 如何使用3列数据框上的强制转换,r,reshape,R,Reshape,在下面的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,
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)
我收到一个错误
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
如何解决此问题?编辑:
您可以尝试使用重塑2
require(reshape2)
dcast(Dat3,DateTime ~ height)
我还编辑了您的示例数据以使其更清晰(据我所知)
要重塑的代码
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
编辑:
您可以尝试使用重塑2
require(reshape2)
dcast(Dat3,DateTime ~ height)
我还编辑了您的示例数据以使其更清晰(据我所知)
要重塑的代码
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
两点:
cast(Dat3, DateTime ~ height, value = "Temp", fun.aggregate = mean)
(对于上述类似的“重塑2”版本,您可以使用dcast(Dat3,DateTime~height,value.var=“Temp”,fun.aggregate=mean)
)
让我们把它分解一下(同样适用于另一个答案)
- 告诉
(或者最好是cast
)您正在使用的数据dcast
- 在
左侧指定一个~
,将您想要的内容描述为“固定”列(如ID变量),以及应该成为聚合值的列名的内容公式
- 指定
变量(或value
中的dcast
)作为要对其执行聚合的变量value.var
- 指定聚合函数(默认情况下,它是length,在我的示例中是
)mean
我认为这是在
cast
中发生的,因为公式是如何解析的,不同的变量是如何猜测的。在“重塑”中,如果我没记错的话,如果你仔细研究代码,如果没有指定值参数,函数:
- 尝试查找名为“value”的变量,如果找到该变量,则将其用作
value
参数
- 如果没有找到,它将使用
data.frame
中最后一列(最右边)的任何列作为值
- 如果最后一列恰好已在
公式中命名(如示例中所示),则函数无法使用该列作为value
参数的值,因此会出现此错误
关于最后一点,“重塑2”没有这个问题,您可以对多个参数重复使用变量
要自己查看代码,请在加载“重塑”包的提示下键入cast
和restrape1
,在加载“重塑”包的提示下键入dcast
和restrape2:::cast
。您可能需要进一步挖掘,因为这两个函数都使用了Hadley作为包的一部分编写的一些其他函数。两点:
您使用的是一个旧版本的软件包,该软件包已被“重塑2”软件包取代
如果有疑问,请尝试显式命名一些函数参数,以帮助了解函数的工作方式
关于第一点,请参见另一个答案
关于第二点,您可以尝试以下方法:
cast(Dat3, DateTime ~ height, value = "Temp", fun.aggregate = mean)
(对于上述类似的“重塑2”版本,您可以使用dcast(Dat3,DateTime~height,value.var=“Temp”,fun.aggregate=mean)
)
让我们把它分解一下(同样适用于另一个答案)
- 告诉
cast
(或者最好是dcast
)您正在使用的数据
- 在
~
左侧指定一个公式
,将您想要的内容描述为“固定”列(如ID变量),以及应该成为聚合值的列名的内容
- 指定
value
变量(或dcast
中的value.var
)作为要对其执行聚合的变量
- 指定聚合函数(默认情况下,它是length,在我的示例中是
mean
)
我认为这是在cast
中发生的,因为公式是如何解析的,不同的变量是如何猜测的。在“重塑”中,如果我没记错的话,如果你仔细研究代码,如果没有指定值参数,函数:
- 尝试查找名为“value”的变量,如果找到该变量,则将其用作
value
参数
- 如果没有找到,它将使用
data.frame
中最后一列(最右边)的任何列作为值
- 如果最后一列恰好已在
公式中命名(如示例中所示),则函数无法使用该列作为value
参数的值,因此会出现此错误
关于最后一点,“重塑2”没有这个问题,您可以对多个参数重复使用变量
要自己查看代码,请在加载“重塑”包的提示下键入cast
和restrape1
,在加载“重塑”包的提示下键入dcast
和restrape2:::cast
。您可能需要进一步挖掘,因为这两个函数都使用了Hadley作为包的一部分编写的一些其他函数。Eh。。。错误消息非常简单。您的数据集包含变量“DateTime”、“x1”和“height”,但您引用的是一个不存在的名为“Temp”的变量。我只是复制了一个错误的变量,请参见编辑的示例您能否澄清所需的输出并提供一个示例?我无法提供输出的示例,否则我就不会问这个问题:)这个解决方案应该类似于安纳塔在下面所展示的,但我认为这可以通过卡斯特来实现。。。错误消息非常简单。您的数据集包含