新变量,指示第一次出现特定值

Sci*_*ens 4 r transformation panel hierarchical-data dplyr

我想创建一个新变量,指示对变量值的第一次特定观察.

在下面的示例数据集中,我希望有一个新变量"firstna",对于此玩家的第一次观察"NA",该变量为"1".

game_data <- data.frame(player = c(1,1,1,1,2,2,2,2), level = c(1,2,3,4,1,2,3,4), points = c(20,NA,NA,NA,20,40,NA,NA))

game_data
  player level points
1      1     1     20
2      1     2     NA
3      1     3     NA
4      1     4     NA
5      2     1     20
6      2     2     40
7      2     3     NA
8      2     4     NA
Run Code Online (Sandbox Code Playgroud)

生成的数据框应如下所示:

game_data_new <- data.frame(player = c(1,1,1,1,2,2,2,2), level = c(1,2,3,4,1,2,3,4), points = c(20,NA,NA,NA,20,40,NA,NA), firstna = c(0,1,0,0,0,0,1,0))

game_data_new
  player level points firstna
1      1     1     20       0
2      1     2     NA       1
3      1     3     NA       0
4      1     4     NA       0
5      2     1     20       0
6      2     2     40       0
7      2     3     NA       1
8      2     4     NA       0
Run Code Online (Sandbox Code Playgroud)

说实话,我不知道该怎么做.如果有dplyr选项,这将是完美的.

nic*_*ola 8

基础R解决方案:

ave(game_data$points, game_data$player,
    FUN = function(x) seq_along(x) == match(NA, x, nomatch = 0))
Run Code Online (Sandbox Code Playgroud)


Ron*_*hah 5

ave首先NA通过group(player)查找的另一个选项.

game_data$firstna <- ave(game_data$points, game_data$player, 
                         FUN = function(x) cumsum(is.na(x)) == 1)

game_data
#  player level points firstna
#1      1     1     20       0
#2      1     2     NA       1
#3      1     3     NA       0
#4      1     4     NA       0
#5      2     1     20       0
#6      2     2     40       0
#7      2     3     NA       1
#8      2     4     NA       0
Run Code Online (Sandbox Code Playgroud)