R 如何使用3列数据框上的强制转换

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,

在下面的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)
我收到一个错误

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
两点:

  • 您使用的是一个旧版本的软件包,该软件包已被“重塑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作为包的一部分编写的一些其他函数。

    两点:

  • 您使用的是一个旧版本的软件包,该软件包已被“重塑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”的变量。我只是复制了一个错误的变量,请参见编辑的示例您能否澄清所需的输出并提供一个示例?我无法提供输出的示例,否则我就不会问这个问题:)这个解决方案应该类似于安纳塔在下面所展示的,但我认为这可以通过卡斯特来实现。。。错误消息非常简单。您的数据集包含