在 mutate() 中使用 lag 为创建的列向前滚动值
Using lag in mutate() for rolling values forward for the created column
我正在尝试在点击流数据中指定会话。我根据月份和 userId 对行进行分组,并尝试创建另一个变量会话,该会话查看 diff_days 列,如果大于 0.00209 则增加,否则保持先前的值。所以基本上我正在尝试创建会话变量并同时在其上使用滞后版本。一组中的第一行始终是 session = 1.
例如,此数据是 group_by 中的一组数据:
ID Month diff_days
2 0 NA
2 0 0.0002
2 0 0.001
2 0 0.01
2 0 0.00034
2 0 0.1
2 0 0.3
2 0 0.00005
我想像这样在每个组中创建会话变量:
ID Month diff_days session
2 0 NA 1
2 0 0.0002 1
2 0 0.001 1
2 0 0.01 2
2 0 0.00034 2
2 0 0.1 3
2 0 0.3 4
2 0 0.00005 4
我正在使用但未给出正确答案的代码:
data <- data %>% group_by(ID, Month)
%>% mutate(session = ifelse(row_number() == 1, 1 ,
ifelse(diff_days < 0.0209, lag(session) , lag(session) + 1))) %>% ungroup()
我已经为此苦苦挣扎了很长一段时间,所以非常感谢任何帮助。
谢谢!
我们可以在按'ID'、'Month'分组后的逻辑向量上使用cumsum
。创建一个逻辑向量 diff_days[-1] >= 0.00209
(删除第一个观察值 NA
并附加 TRUE
作为第一个。然后,获取累积和,以便对于每个 TRUE 值,它都会被添加1.
data %>%
group_by(ID, Month) %>%
mutate(session = cumsum(c(TRUE, diff_days[-1] >= 0.00209)))
# A tibble: 8 x 4
# Groups: ID, Month [1]
# ID Month diff_days session
# <int> <int> <dbl> <int>
#1 2 0 NA 1
#2 2 0 0.0002 1
#3 2 0 0.001 1
#4 2 0 0.01 2
#5 2 0 0.00034 2
#6 2 0 0.1 3
#7 2 0 0.3 4
#8 2 0 0.00005 4
我正在尝试在点击流数据中指定会话。我根据月份和 userId 对行进行分组,并尝试创建另一个变量会话,该会话查看 diff_days 列,如果大于 0.00209 则增加,否则保持先前的值。所以基本上我正在尝试创建会话变量并同时在其上使用滞后版本。一组中的第一行始终是 session = 1.
例如,此数据是 group_by 中的一组数据:
ID Month diff_days
2 0 NA
2 0 0.0002
2 0 0.001
2 0 0.01
2 0 0.00034
2 0 0.1
2 0 0.3
2 0 0.00005
我想像这样在每个组中创建会话变量:
ID Month diff_days session
2 0 NA 1
2 0 0.0002 1
2 0 0.001 1
2 0 0.01 2
2 0 0.00034 2
2 0 0.1 3
2 0 0.3 4
2 0 0.00005 4
我正在使用但未给出正确答案的代码:
data <- data %>% group_by(ID, Month)
%>% mutate(session = ifelse(row_number() == 1, 1 ,
ifelse(diff_days < 0.0209, lag(session) , lag(session) + 1))) %>% ungroup()
我已经为此苦苦挣扎了很长一段时间,所以非常感谢任何帮助。
谢谢!
我们可以在按'ID'、'Month'分组后的逻辑向量上使用cumsum
。创建一个逻辑向量 diff_days[-1] >= 0.00209
(删除第一个观察值 NA
并附加 TRUE
作为第一个。然后,获取累积和,以便对于每个 TRUE 值,它都会被添加1.
data %>%
group_by(ID, Month) %>%
mutate(session = cumsum(c(TRUE, diff_days[-1] >= 0.00209)))
# A tibble: 8 x 4
# Groups: ID, Month [1]
# ID Month diff_days session
# <int> <int> <dbl> <int>
#1 2 0 NA 1
#2 2 0 0.0002 1
#3 2 0 0.001 1
#4 2 0 0.01 2
#5 2 0 0.00034 2
#6 2 0 0.1 3
#7 2 0 0.3 4
#8 2 0 0.00005 4