【问题标题】:Calculating mean price by day [duplicate]按天计算平均价格[重复]
【发布时间】:2020-05-05 07:45:52
【问题描述】:

我想这是一个相当简单的任务...... 我正在尝试计算每天的平均价格。这里有3个不同的日子,每个都有一些价格。 这是我最初拥有的 DataFrame

 ID       Date      RoomAv    Price
  1    2001-01-02    TRUE      110
  2    2001-01-04    FALSE     120
  3    2001-01-03    TRUE      130
  4    2001-01-03    TRUE      140
  5    2001-01-03    TRUE      150
  6    2001-01-02    FALSE     160
  7    2001-01-02    TRUE      170
  8    2001-01-04    TRUE      180
  9    2001-01-04    FALSE     190
 10    2001-01-02    TRUE      200

我需要它是这样的

    Date      AveragePrice
 2001-01-02       num1
 2001-01-03       num2
 2001-01-04       num3

这就是我尝试做的事情

df <- DataFrame %>%
  group_by(DataFrame$Date) %>%
  summarize(DataFrame$price == mean(DataFrame$Price))

我得到了:

Error: Column `DataFrame$price == mean(DataFrame$Price)` must be length 1 (a summary value), not 0

没有使用过 data.table 库,但想知道它是如何实现的。

【问题讨论】:

  • 你一般不需要在基于dplyr的函数中使用dataframe_name$

标签: r dataframe dplyr mean


【解决方案1】:

data.table 的选项

library(data.table)
setDT(df)[, .(Price = mean(Price), by = Date]

【讨论】:

    【解决方案2】:

    你可以这样做

    使用 dplyr

    df <- DataFrame %>%
      group_by(Date) %>%
      mutate(price == mean(Price))
    

    使用 data.table

    df <- DataFrame[, mean(Price),.(Date)]
    

    【讨论】:

      【解决方案3】:

      您可以使用 base R 中的aggregate() 来制作它:

      dfout <- aggregate(Price ~Date, df, mean)
      

      这样

      > dfout
              Date    Price
      1 2001-01-02 160.0000
      2 2001-01-03 140.0000
      3 2001-01-04 163.3333
      

      数据

      df <- structure(list(ID = 1:10, Date = c("2001-01-02", "2001-01-04", 
      "2001-01-03", "2001-01-03", "2001-01-03", "2001-01-02", "2001-01-02", 
      "2001-01-04", "2001-01-04", "2001-01-02"), RoomAv = c(TRUE, FALSE, 
      TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE), Price = c(110L, 
      120L, 130L, 140L, 150L, 160L, 170L, 180L, 190L, 200L)), class = "data.frame", row.names = c(NA, 
      -10L))
      

      【讨论】:

        【解决方案4】:

        请记住,在 R 中,== 用于测试某个值是否等于另一个值,例如 x == 1。因此,您应该使用= 在summary 中分配新变量。这是正确的版本。

        library(dplyr)
        DataFrame %>%
          group_by(Date) %>%
          summarize(avrgPrice = mean(Price))
        

        【讨论】:

          【解决方案5】:

          谢谢, 其实我发现这个方法是最短的:

          dfMean <- aggregate(DataFrame$Price ~ DataFrame$Date, DataFrame, mean)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多