R 除某些列外,对所有列进行变异
我有一个数据框架,其中包含一组变量,我希望在不同的长度上滞后,以便我可以在以后的回归中使用它们(而不是手动每次滞后一个变量) 我在Stackoverflow上发现了这一点,它似乎起到了作用: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
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