小编tie*_*etc的帖子

如何将数据框 R 代码转换为 data.table 代码

我有一个包含赛马数据的数据集。如果缺少 avgl6rank 值,我编写了一个函数来计算每行马匹在比赛日期的平均最近 6 个排名。该函数运行速度非常慢,所以我想通过使用 data.table 来加快速度。但是我遇到了麻烦,如何在每行的日期之前使用 rdate 为每行创建组,并按 Horsenum 分组。我在哪里可以插入日期过滤

jc.data[is.na(avgl6rank), avgl6rank:= round(mean(tail(rank, 6),na.rm = T)), by = horsenum]
Run Code Online (Sandbox Code Playgroud)

预期输出与输入数据框相同,如果我们可以在该行的日期之前找到这匹马的最近 6 次或更少的比赛记录,只需在 avgl6rank 列中填写缺失值,并计算平均排名。

Avg6RankF <- function(df){
    if (!is.na(df["avgl6rank"])) {
      return(df["avgl6rank"])
    } else {
      tmp <- subset(jc.data, horsenum == df["horsenum"] & rdate < df["rdate"])
      if (nrow(tmp) > 0) {
        return(round(mean(tail(tmp$rank, 6),na.rm = TRUE)))
      } else {
        return(NA)
      }
    }
  }

  jc.data['avgl6rank'] <- apply(jc.data, 1, Avg6RankF)
Run Code Online (Sandbox Code Playgroud)
 structure(list(index = c(64L, 577L, 33704L, 34538L, 35753L, 36119L, 
36641L, 38259L, 38484L, 39060L, 40507L, 41326L, …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

0
推荐指数
1
解决办法
93
查看次数

标签 统计

data.table ×1

dplyr ×1

r ×1