相对于组内的整体变化产生滞后
Create lags relative to whole change within group
我已经尝试创建一个变量,该变量表示另一个变量相对于组内变量的整体变化的滞后版本。
让我们使用这个示例数据框:
game_data <- data.frame(player = c(1,1,1,2,2,2,3,3,3), level = c(1,2,3,1,2,3,1,2,3), score=as.numeric(c(0,150,170,80,100,110,75,100,0)))
game_data
player level score
1 1 1 0
2 1 2 150
3 1 3 170
4 2 1 80
5 2 2 100
6 2 3 110
7 3 1 75
8 3 2 100
9 3 3 0
我尝试了以下方法,但在滞后变量工作时,我无法创建一个新变量来显示变量相对于玩家整体变化的滞后:
result <-
+ game_data %>%
+ group_by(player) %>%
+ mutate(
+ lag_score = score - dplyr::lag(score, n=1, default = NA),
+ lag_score_relative = lag_score/sum(lag_score))
result
# A tibble: 9 x 5
# Groups: player [3]
player level score lag_score lag_score_relative
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 0 NA NA
2 1 2 150 150 NA
3 1 3 170 20 NA
4 2 1 80 NA NA
5 2 2 100 20 NA
6 2 3 110 10 NA
7 3 1 75 NA NA
8 3 2 100 25 NA
9 3 3 0 -100 NA
例如,对于玩家 1,它应该在
级别 1:NA/170 = NA
2 级:150/170
等级 3:20/170
在此先感谢,希望任何人都能提供帮助。
如果您 sum
滞后分数,您将包含一个 NA
。 sum
然后returnsNA
。你除以 NA
最后 returns NA
每个值。为避免这种情况,只需在 sum
的调用中将 na.rm
参数设置为 TRUE
并且 NA
不会包含在总和中:
game_data <- data.frame(player = c(1,1,1,2,2,2,3,3,3), level = c(1,2,3,1,2,3,1,2,3),
score=as.numeric(c(0,150,170,80,100,110,75,100,0)))
game_data %>%
group_by(player) %>%
mutate(
lag_score = score - dplyr::lag(score, n=1, default = NA),
lag_score_relative = lag_score/sum(lag_score, na.rm = TRUE))
我已经尝试创建一个变量,该变量表示另一个变量相对于组内变量的整体变化的滞后版本。
让我们使用这个示例数据框:
game_data <- data.frame(player = c(1,1,1,2,2,2,3,3,3), level = c(1,2,3,1,2,3,1,2,3), score=as.numeric(c(0,150,170,80,100,110,75,100,0)))
game_data
player level score
1 1 1 0
2 1 2 150
3 1 3 170
4 2 1 80
5 2 2 100
6 2 3 110
7 3 1 75
8 3 2 100
9 3 3 0
我尝试了以下方法,但在滞后变量工作时,我无法创建一个新变量来显示变量相对于玩家整体变化的滞后:
result <-
+ game_data %>%
+ group_by(player) %>%
+ mutate(
+ lag_score = score - dplyr::lag(score, n=1, default = NA),
+ lag_score_relative = lag_score/sum(lag_score))
result
# A tibble: 9 x 5
# Groups: player [3]
player level score lag_score lag_score_relative
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 0 NA NA
2 1 2 150 150 NA
3 1 3 170 20 NA
4 2 1 80 NA NA
5 2 2 100 20 NA
6 2 3 110 10 NA
7 3 1 75 NA NA
8 3 2 100 25 NA
9 3 3 0 -100 NA
例如,对于玩家 1,它应该在 级别 1:NA/170 = NA 2 级:150/170 等级 3:20/170
在此先感谢,希望任何人都能提供帮助。
如果您 sum
滞后分数,您将包含一个 NA
。 sum
然后returnsNA
。你除以 NA
最后 returns NA
每个值。为避免这种情况,只需在 sum
的调用中将 na.rm
参数设置为 TRUE
并且 NA
不会包含在总和中:
game_data <- data.frame(player = c(1,1,1,2,2,2,3,3,3), level = c(1,2,3,1,2,3,1,2,3),
score=as.numeric(c(0,150,170,80,100,110,75,100,0)))
game_data %>%
group_by(player) %>%
mutate(
lag_score = score - dplyr::lag(score, n=1, default = NA),
lag_score_relative = lag_score/sum(lag_score, na.rm = TRUE))