【问题标题】:Extract values from data frame by subsetting based on current date and previous date通过基于当前日期和上一个日期的子集从数据框中提取值
【发布时间】:2020-04-29 09:26:52
【问题描述】:

我有以下数据集,该数据集描述了每周完成的总培训时间,参考了一周结束的日期。周是从星期一到星期日,因此WeekEnding 日期相隔 7 天。

df<- structure(list(WeekEnding = c("2020-03-08", "2020-03-15", "2020-03-22", 
"2020-03-29", "2020-04-05", "2020-04-12", "2020-04-19", "2020-04-26"
), TotalTraining.hrs = c(14.119574637, 15.560762437, 14.160377084, 
16.968056203, 14.617250934, 10.865982397, 14.619121779, 13.135129677
)), row.names = c(NA, 8L), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"))

此数据将每周更新。我希望能够比较最近一周与前一周的总培训时间。我可以轻松获得最近一周(即最长一周)的总培训时间。

df$TotalTraining.hrs[df$WeekEnding == max(df$WeekEnding)]
[1] 13.13513

而且我可以手动输入日期来获取前一周

> df$TotalTraining.hrs[df$WeekEnding == "2020-04-19"]
[1] 14.61912

但是,由于数据会定期更新,我希望能够参考最近一周的前一周,而无需手动输入日期。

> df$TotalTraining.hrs[df$WeekEnding == (max(df$WeekEnding)- 7)]
Error in max(df$WeekEnding) - 7 : non-numeric argument to binary operator

有解决办法吗? 谢谢

【问题讨论】:

    标签: r subset


    【解决方案1】:

    如果订购,最后一个是

     df[length(df),]
    

    和上一个

     df[length(df)-1,]
    

    【讨论】:

      【解决方案2】:

      如果您的数据已经排序,您可以选择最后两行并使用diff 减去。

      diff(tail(df, 2)$TotalTraining.hrs)
      #[1] -1.483992
      

      如果没有订购,可以先订购

      df$WeekEnding <- as.Date(df$WeekEnding)
      df <- df[order(df$WeekEnding),]
      

      我们可以计算百分比变化:

      x <- tail(f, 2)$TotalTraining.hrs
      diff(x)/x[1] * 100
      #[1] -10.15103
      

      【讨论】:

      • 如果我想计算前一周的百分比变化怎么办?即((当前周总计 - 前一周总计)/前一周总计)*100)
      【解决方案3】:

      您可以使用which.max,它表示max值的索引并减去1

      diff <- df$TotalTraining.hrs[df$WeekEnding == max(df$WeekEnding)] - df$TotalTraining.hrs[which.max(df$WeekEnding) -1]
      

      结果:

      diff
      [1] -1.483992
      

      (此解决方案要求dfWeekEnding排序。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多