R 除某些列外,对所有列进行变异

R 除某些列外,对所有列进行变异,r,dataframe,dplyr,regression,mutate,R,Dataframe,Dplyr,Regression,Mutate,我有一个数据框架,其中包含一组变量,我希望在不同的长度上滞后,以便我可以在以后的回归中使用它们(而不是手动每次滞后一个变量) 我在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

我有一个数据框架,其中包含一组变量,我希望在不同的长度上滞后,以便我可以在以后的回归中使用它们(而不是手动每次滞后一个变量)

我在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

问题是,这会滞后于每一列,我有一些列我不想滞后。我如何调整上述代码,以便排除我不希望被延迟的列?还有,我如何延迟不同的长度,现在它只延迟1作为默认设置

请查看
mutate\u at
mutate\u if

库(dplyr)
df=tibble(a=字母[1:10],b=21:30,c=31:40)
#排除a列
df%>%
在(变量((“a”)、滞后)处突变
#>#tibble:10 x 3
#>a、b、c
#>      
#>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小时27 37
#>9 I 28 38
#>10 J 29 39
#仅列b
df%>%
(c(“b”)处突变,滞后,4)
#>#tibble:10 x 3
#>a、b、c
#>      
#>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小时24 38
#>9 I 25 39
#>10 J 26 40
#仅字符列
df%>%
如果(is.字符,滞后,3)发生变异
#>#tibble:10 x 3
#>a、b、c
#>      
#>  1      21    31
#>  2      22    32
#>  3      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克30 40

由(v0.3.0)创建于2020-04-20年,我一直在谷歌上搜索同样的问答,然后注意到
mutate_at()
mutate_if()
现在被
cross()
所取代,这为“mutate all except this columns”模式提供了一种稍微容易记住的方法


我尝试了#只在(c(“b”),lag,4)处对我想要的列进行b df%>%mutate_,但它似乎没有任何作用。我分配给这段代码的新数据框看起来与应用cod(lags)之前的数据框一模一样,而ycode更能显示您的真实数据集和您在问题中尝试过的代码。macro_2%mutate_at(c(“inc_ldiff”,“unem_ldiff”,“hp_ldiff”,“int_diff”,“m1_ldiff”),lag,2)这就是我应用的代码。宏是我的宏变量数据框架,包含日期列、季度列、年份列和一些伪列。但是,它对我的数据框中选定的列没有任何作用。@Andycode,您能否尝试将
lag
更改为
dplyr::lag
,以查看这是否有帮助?
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