按组滞后变量在dplyr中不起作用

时间:2017-08-31 08:50:47

标签: r dplyr lag

我拼命试图按组延迟变量。我发现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

我认为一个问题是我的团队长度不一样......

感谢您提供帮助。

2 个答案:

答案 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