我想创建一个新变量,指示对变量值的第一次特定观察.
在下面的示例数据集中,我希望有一个新变量"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 …Run Code Online (Sandbox Code Playgroud) 我有一个变量指示事件发生后的时间,它的编码如下:
time_since_event <- c("18 m", "56 m", "2 h 30 m", "18 h 2 m")
Run Code Online (Sandbox Code Playgroud)
我希望它是数字,并始终表示事件发生后的分钟数:
time_since_event_min <- c(18,56,150,1082)
Run Code Online (Sandbox Code Playgroud) 我有一个按用户分组的记录.在变量"day"有一些0,我想按顺序(=前一个值+1)替换它.
data <- data.frame(user = c(1,1,1,2,2,2,2,2), day = c(170,0,172,34,35,0,0,38))
data
user day
1 1 170
2 1 0
3 1 172
4 2 34
5 2 35
6 2 0
7 2 0
8 2 38
Run Code Online (Sandbox Code Playgroud)
我想要以下内容:
data_new
user day
1 1 170
2 1 171
3 1 172
4 2 34
5 2 35
6 2 36
7 2 37
8 2 38
Run Code Online (Sandbox Code Playgroud)
我尝试了以下(效率非常低,并不适用于所有情况......):
data = group_by(data, user) %>%
+ mutate(lead_day = lead(day),
+ day_new = case_when(day == 0 …Run Code Online (Sandbox Code Playgroud)