根据不同列中的名称更改重新启动滞后
Restarting Lag based on Change in Name in Different Column
我正在尝试将变量的滞后插入到 R 数据框中的单独列中。但是,每次不同列中的名称更改时,我都希望滞后为 'restart'。
数据示例如下:
Player Crosses
Robbie Brady 11
Robbie Brady 9
Robbie Brady 13
Robbie Brady 15
Robbie Brady 20
Robert Snodgrass 5
我想要'Crosses'的延迟,我正在使用:
lag(data$Crosses, 1)
来帮助做到这一点。但是当玩家名称更改时,我希望延迟重新开始,否则延迟会延续到与他们无关的观察中。所以只是做
data$lag1 <- lag(data$Crosses, 1)
不行
我试过使用:
tapply(data$Crosses, data$Player, lag, 1)
但这会生成一个数组,我无法将其作为新列输入到我的数据框中。
有谁知道我可以将滞后输入到我的数据框中,同时在另一列中的值更改时重新启动滞后的解决方案?
我们可以按 'Player' 分组,然后在十字架上进行 lag
。这可以用 data.table
来完成。我们将 'data.frame' 转换为 'data.table' (setDT(df1)
),按 'Player' 分组,我们创建一个新列 ('lag1') 作为 Crosses 的滞后。在data.table
的开发版本中,shift
默认给出lag
library(data.table)#v1.9.5+
setDT(df1)[, lag1:=shift(Crosses) , by = Player]
或者使用 dplyr
,我们按 'Player' 分组并使用 mutate
创建一个新列
library(df1)
df1 %>%
group_by(Player) %>%
mutate(lag1 = lag(Crosses))
你可以使用 ave
data$lag1 <- ave(data$Crosses, data$Player, FUN=function(x) lag(x, 1))
我正在尝试将变量的滞后插入到 R 数据框中的单独列中。但是,每次不同列中的名称更改时,我都希望滞后为 'restart'。
数据示例如下:
Player Crosses
Robbie Brady 11
Robbie Brady 9
Robbie Brady 13
Robbie Brady 15
Robbie Brady 20
Robert Snodgrass 5
我想要'Crosses'的延迟,我正在使用:
lag(data$Crosses, 1)
来帮助做到这一点。但是当玩家名称更改时,我希望延迟重新开始,否则延迟会延续到与他们无关的观察中。所以只是做
data$lag1 <- lag(data$Crosses, 1)
不行
我试过使用:
tapply(data$Crosses, data$Player, lag, 1)
但这会生成一个数组,我无法将其作为新列输入到我的数据框中。
有谁知道我可以将滞后输入到我的数据框中,同时在另一列中的值更改时重新启动滞后的解决方案?
我们可以按 'Player' 分组,然后在十字架上进行 lag
。这可以用 data.table
来完成。我们将 'data.frame' 转换为 'data.table' (setDT(df1)
),按 'Player' 分组,我们创建一个新列 ('lag1') 作为 Crosses 的滞后。在data.table
的开发版本中,shift
默认给出lag
library(data.table)#v1.9.5+
setDT(df1)[, lag1:=shift(Crosses) , by = Player]
或者使用 dplyr
,我们按 'Player' 分组并使用 mutate
library(df1)
df1 %>%
group_by(Player) %>%
mutate(lag1 = lag(Crosses))
你可以使用 ave
data$lag1 <- ave(data$Crosses, data$Player, FUN=function(x) lag(x, 1))