将列中的 NA 值替换为 +1 以上行中的值

标签 r for-loop na zoo

我有以下数据框:

game <- c('game1','game1','game2','game2','game2','game3','game4', 'game4')
shot_number <- c(1,NA,1,NA,NA,1,1,NA)
df <- data.frame(game, shot_number)

      game     shot_number
      game1              1
      game1             NA
      game2              1
      game2             NA
      game2             NA
      game3              1
      game4              1
      game4             NA

我想通过将上一行中的值加 1 来填充 NA,因此 df 如下所示:

      game     shot_number
      game1              1
      game1              2
      game2              1
      game2              2
      game2              3
      game3              1
      game4              1
      game4              2

我不知道是否有某种方法可以使用“zoo”库和 na.locf 来执行此操作,或者我是否需要编写 for 循环或某种函数。

最佳答案

使用 dplyr 组和 cumsum:

library(dplyr)

df1 %>% 
  group_by(game) %>% 
  mutate(shot_number_new = cumsum(is.na(shot_number)) + 1)

# Source: local data frame [8 x 3]
# Groups: game [4]
# 
#     game shot_number shot_number_new
#   <fctr>       <dbl>           <dbl>
# 1  game1           1               1
# 2  game1          NA               2
# 3  game2           1               1
# 4  game2          NA               2
# 5  game2          NA               3
# 6  game3           1               1
# 7  game4           1               1
# 8  game4          NA               2

关于将列中的 NA 值替换为 +1 以上行中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812908/

相关文章:

r - 如何在ggplot2中使用 "grid.arrange"在特定位置留下没有图形的间隙

r - Poisson MLE 的手工 R 代码

javascript - 从未见过这样的 for 循环 这是如何工作的?

java - 加法和级数

R 在 R 中使用引用时间表过滤数据

r - 如果位于唯一 ID 的开头或结尾,则过滤连续的相同值

Java 循环缺少给定数组中的元素

r - 合并数据、设置 NA 值和替换 NA 值

r - 如何用R数据框中的NA替换空字符串?

r - 如何删除带有 NA 和 NA 之后的行?