【问题标题】:How to calculate a mean on a datable in R based on several conditions如何根据几个条件计算 R 中数据表的平均值
【发布时间】:2021-02-16 21:58:27
【问题描述】:

我有如下数据:

library(lubridate)
library(dplyr)
library(data.table)
MWE <- data.table(
  Date=rep(seq(ymd("2020-1-1"), ymd("2020-3-30"), by = "days"),each=6),
  Country=rep(c("France","United States","Germany"),90*6),
  TransportType=rep(c("Train","Cars"),each=3,90*3),
  Value=rnorm(90*6,2,3)
  )

我想创建一个新变量,即值的平均值:

  • 按国家和交通方式
  • 按工作日
  • 基于 3 月之前的日期(但这里也是 3 月)

所以平均值应该在一月和二月计算,但在整个时期的数据库中。

我已经成功完成了前两个(或者我认为是的,我正在检查):

MWE_2 <- MWE %>%
  .[,JourSem:=weekdays(Date)] %>%
  .[,Moyenne:=mean(Value),by=.(Country,JourSem,TransportType)]

但我不确定如何传递另一个条件。我想我是这样理解的

MWE_3 <- MWE %>%
  .[,JourSem:=weekdays(Date)] %>%
  .[Date <= "2020-02-29",Moyenne:=mean(Value),by=.(Country,JourSem,TransportType)]

但是我缺少三月日期的值,这是合乎逻辑的,因为它们被过滤掉了,因此这不是我想要的。

【问题讨论】:

    标签: r data.table data-manipulation


    【解决方案1】:

    我们可以先计算每个工作日的一月和二月的平均值,然后将此数据与三月的数据相结合。

    library(data.table)
    
    MWE[, JourSem:=weekdays(Date)]
    
    d1 <- MWE[Date <= as.Date("2020-02-29")] %>%
            .[, .(Moyenne = mean(Value)), JourSem]
    
    MWE[Date > as.Date("2020-02-29")][d1, on = 'JourSem']
    

    【讨论】:

    • 我一直不清楚。我希望平均值跨越其他 3 月数据,但仅在 1 月和 2 月计算
    • 我不清楚你想在三月份展示什么价值?您的意思是 3 月数据将具有整个数据的平均值(1 月和 2 月结合)?那么整个三月的价值都一样吗?
    • 例如,对于德国 3 月星期三有关火车的数据,我希望获得德国 1 月和 2 月计算的有关火车的星期三的平均值(然后通过构建对于整个期间的火车,与德国每个星期三的火车相同)
    • 你能检查更新的答案是否更接近你想要的吗? d1 是 1 月和 2 月每个工作日的平均值。
    • 是的,我希望不必对数据进行切片来获取它
    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多