我拼命试图按组延迟变量。我发现this帖子处理的问题与我面临的问题基本相同,但解决方案对我不起作用,不知道原因。
这是我的问题:
library(dplyr)
df <- data.frame(monthvec = c(rep(1:2, 2), rep(3:5, 3)))
df <- df %>%
arrange(monthvec) %>%
mutate(growth=ifelse(monthvec==1, 0.3,
ifelse(monthvec==2, 0.5,
ifelse(monthvec==3, 0.7,
ifelse(monthvec==4, 0.1,
ifelse(monthvec==5, 0.6,NA))))))
df%>%
group_by(monthvec) %>%
mutate(lag.growth = lag(growth, order_by=monthvec))
Source: local data frame [13 x 3]
Groups: monthvec [5]
monthvec growth lag.growth
<int> <dbl> <dbl>
1 1 0.3 NA
2 1 0.3 0.3
3 2 0.5 NA
4 2 0.5 0.5
5 3 0.7 NA
6 3 0.7 0.7
7 3 0.7 0.7
8 4 0.1 NA
9 4 0.1 0.1
10 4 0.1 0.1
11 5 0.6 NA
12 5 0.6 0.6
13 5 0.6 0.6
这就是我最终想要的:
df$lag.growth <- c(NA, NA, 0.3, 0.3, 0.5, 0.5, 0.5, 0.7,0.7,0.7, 0.1,0.1,0.1)
monthvec growth lag.growth
1 1 0.3 NA
2 1 0.3 NA
3 2 0.5 0.3
4 2 0.5 0.3
5 3 0.7 0.5
6 3 0.7 0.5
7 3 0.7 0.5
8 4 0.1 0.7
9 4 0.1 0.7
10 4 0.1 0.7
11 5 0.6 0.1
12 5 0.6 0.1
13 5 0.6 0.1
我认为一个问题是我的团队长度不一样......
感谢您提供帮助。
答案 0 :(得分:2)
这是一个想法。我们按monthvec
进行分组,以获取每个组的行数(cnt
)。我们取消组合并使用cnt
的第一个值作为滞后的大小。我们在monthvec
重新组合,并用每个组的第一个值替换每个组中的值。
library(dplyr)
df %>%
group_by(monthvec) %>%
mutate(cnt = n()) %>%
ungroup() %>%
mutate(lag.growth = lag(growth, first(cnt))) %>%
group_by(monthvec) %>%
mutate(lag.growth = first(lag.growth)) %>%
select(-cnt)
给出,
# A tibble: 13 x 3 # Groups: monthvec [5] monthvec growth lag.growth <int> <dbl> <dbl> 1 1 0.3 NA 2 1 0.3 NA 3 2 0.5 0.3 4 2 0.5 0.3 5 3 0.7 0.5 6 3 0.7 0.5 7 3 0.7 0.5 8 4 0.1 0.7 9 4 0.1 0.7 10 4 0.1 0.7 11 5 0.6 0.1 12 5 0.6 0.1 13 5 0.6 0.1
答案 1 :(得分:2)
您可以将原始数据与已移位的“monthvec”的数据框合并。
goto