相对于组内的整体变化创建滞后
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相对于组内的整体变化创建滞后相关的知识,希望对你有一定的参考价值。
我已经尝试创建一个变量来表示相对于组中变量的整个变化的另一个变量的滞后版本。
让我们使用这个示例数据帧:
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
返回NA
。你除以NA
,它最终为每个值返回NA
。为了避免这种情况,只需在你的na.rm
和TRUE
s调用中将sum
参数设置为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))
以上是关于相对于组内的整体变化创建滞后的主要内容,如果未能解决你的问题,请参考以下文章