Mutate_all,除了某些列

And*_*ode 11 regression r dataframe dplyr

我有一个包含一组变量的数据框,我想将它们滞后于不同的长度,以便稍后可以在回归中使用它们(而不是手动一次滞后一个变量)。

我在 Stackoverflow 上发现了这段代码,似乎可以解决这个问题:

df = data.frame(a = 1:10, b = 21:30)
dplyr::mutate_all(df, lag)
    a  b
1  NA NA
2   1 21
3   2 22
4   3 23
5   4 24
6   5 25
7   6 26
8   7 27
9   8 28
10  9 29
Run Code Online (Sandbox Code Playgroud)

问题是这会滞后于每一列,而我有一些列我不想被滞后。如何调整上述代码以便排除我不想滞后的列?另外我如何滞后不同的长度,现在默认设置仅滞后 1

mac*_*mac 22

我不断在谷歌上搜索相同的问答,然后注意到mutate_at()mutate_if()现在被 取代across(),它为“突变除这些列之外的所有列”模式提供了一种稍微容易记住的方法

df = data.frame(a = 1:10, b = 21:30, c=31:40, d=41:50)
> df
    a  b  c  d
1   1 21 31 41
2   2 22 32 42
3   3 23 33 43
4   4 24 34 44
5   5 25 35 45
6   6 26 36 46
7   7 27 37 47
8   8 28 38 48
9   9 29 39 49
10 10 30 40 50
> # everythng but columns b and c
> df %>% mutate(across(!b & !c, lag))
    a  b  c  d
1  NA 21 31 NA
2   1 22 32 41
3   2 23 33 42
4   3 24 34 43
5   4 25 35 44
6   5 26 36 45
7   6 27 37 46
8   7 28 38 47
9   8 29 39 48
10  9 30 40 49
Run Code Online (Sandbox Code Playgroud)


Din*_*ang 4

看看mutate_at或者mutate_if

library(dplyr)
df = tibble(a = LETTERS[1:10], b = 21:30,c=31:40)

#exclude column a
df %>% 
  mutate_at(vars(-("a")),lag)
#> # A tibble: 10 x 3
#>    a         b     c
#>    <chr> <int> <int>
#>  1 A        NA    NA
#>  2 B        21    31
#>  3 C        22    32
#>  4 D        23    33
#>  5 E        24    34
#>  6 F        25    35
#>  7 G        26    36
#>  8 H        27    37
#>  9 I        28    38
#> 10 J        29    39
#only column b
df %>% 
  mutate_at(c("b"),lag,4)
#> # A tibble: 10 x 3
#>    a         b     c
#>    <chr> <int> <int>
#>  1 A        NA    31
#>  2 B        NA    32
#>  3 C        NA    33
#>  4 D        NA    34
#>  5 E        21    35
#>  6 F        22    36
#>  7 G        23    37
#>  8 H        24    38
#>  9 I        25    39
#> 10 J        26    40
#only character column
df %>% 
  mutate_if(is.character,lag,3)
#> # A tibble: 10 x 3
#>    a         b     c
#>    <chr> <int> <int>
#>  1 <NA>     21    31
#>  2 <NA>     22    32
#>  3 <NA>     23    33
#>  4 A        24    34
#>  5 B        25    35
#>  6 C        26    36
#>  7 D        27    37
#>  8 E        28    38
#>  9 F        29    39
#> 10 G        30    40
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020-04-20 创建