我有以下数据框:
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/