【问题标题】:Frequency count with multiple conditions R具有多个条件的频率计数 R
【发布时间】:2017-05-13 12:13:46
【问题描述】:

有一个数据框

Date         Team            Opponent   Weather   Outcome
2017-05-01   All Stars       B Stars      Rainy     1
2017-05-02   All Stars       V Stars      Rainy     1
2017-05-03   All Stars       M Trade      Sunny     0
 .
 .
2017-05-11   All Stars       Vdronee      Sunny     0

结果 1 表示胜利。我已经使用表格函数来获取频率和应用条件。

table(df$Outcome, df$Team == "All Stars")

把这个还给我

    FALSE TRUE
  0  1005   30
  1  1323   57

所以获胜的频率是 57/87 =0.655

两个问题:

而不是手动计算获胜频率,我如何将其直接嵌入到公式中?

如何根据最近的 x 个观察结果进行过滤?即类似

    table(df$Outcome, df$Team == "All Stars" & df$date = filtering for the 5 most recent observations)

谢谢

【问题讨论】:

  • 您的Date 列是否总是按时间顺序排序?看起来是这样。
  • 比例表可以使用prop.table()
  • @kanak 按每个团队的 desc 顺序按时间顺序排序。例如 2017-01-01 All Stars 2017-01-02 All Stars 2017-01-01 Other Team 2017-01-02 Other Team
  • 如果您提供可重现的examples,则更容易获得帮助。欢迎来到堆栈溢出

标签: r count data.table frequency


【解决方案1】:

一个选项是使用data.table

libray(data.table)
dt <- data.table(df)
dt[, .(prop=sum(outcome)/.N),Team]

要获得 5 个最近的观察结果,您可以:

dt[,head(.SD,5),by=.(Team,Date)][,.(prop=sum(outcoume/.N),Team]

【讨论】:

  • 感谢您的评论。上面公式中的过滤器应用在哪里?在我的数据框中,我有更多的团队,然后是“全明星”。上述建议不会针对特定团队进行过滤,对吧?
  • 按团队分组。
  • 是否可以像此示例中那样过滤特定团队:table(df$Outcome, df$Team == "All Stars")
  • dt[Team=="All Stars",head(.SD,5),by=.(Team,Date)][,.(prop=sum(outcoume/.N),Team]。看看here
  • @DJJ,请学习如何format your code
猜你喜欢
  • 1970-01-01
  • 2016-11-18
  • 2018-11-24
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多