select_at() 在一次调用中删除一些变量,将一些变量拉到前面,然后将 everything() ?

Dou*_*Fir 4 r dplyr

例如,我想删除字段mpg,选择carb,使其成为第一个,然后是现有顺序中剩余的所有内容。

mtcars |> select_at(vars(-mpg, carb, everything()))
Run Code Online (Sandbox Code Playgroud)

这似乎会根据需要降低 mpg,但 carb 不在前面位置/第一个变量。

我打电话的select_at()目的是用英语读“下降英里数,然后首先选择碳水化合物,然后选择其他一切”。

在 ?vars 的文档中,它说要使用 across。我对其中任何一种都持开放态度,但如果可能的话,我更喜欢单衬,而不是例如select(-mpg) |> select_at(vars(carb, everything()))

akr*_*run 5

顺序可以更改 - 即将需要删除的列作为最后一个条目

library(dplyr)
mtcars |> 
 select_at(vars(carb, everything(), -mpg)) |> 
 head()
                  carb cyl disp  hp drat    wt  qsec vs am gear
Mazda RX4            4   6  160 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag        4   6  160 110 3.90 2.875 17.02  0  1    4
Datsun 710           1   4  108  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive       1   6  258 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout    2   8  360 175 3.15 3.440 17.02  0  0    3
Valiant              1   6  225 105 2.76 3.460 20.22  1  0    3
Run Code Online (Sandbox Code Playgroud)

_at/_all均已弃用。我们可以直接使用everything()select

 mtcars |> 
   select(carb, everything(), -mpg) |> 
   head()
                  carb cyl disp  hp drat    wt  qsec vs am gear
Mazda RX4            4   6  160 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag        4   6  160 110 3.90 2.875 17.02  0  1    4
Datsun 710           1   4  108  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive       1   6  258 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout    2   8  360 175 3.15 3.440 17.02  0  0    3
Valiant              1   6  225 105 2.76 3.460 20.22  1  0    3
Run Code Online (Sandbox Code Playgroud)

问题是,当我们用作-mpg第一个条目时,它会删除该列,保留该列的所有其余部分,然后添加“carb”作为第二个条目不会执行任何操作,因为“carb”已经是所选数据中的列并且与列重复不允许使用名称,最后一个everything()再次添加回“mpg”。

> mtcars |> select_at(vars(-mpg)) |> head()
                  cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant             6  225 105 2.76 3.460 20.22  1  0    3    1
> mtcars |> select_at(vars(-mpg, carb)) |> head()
                  cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant             6  225 105 2.76 3.460 20.22  1  0    3    1
> mtcars |> select_at(vars(-mpg, carb, everything())) |> head()
                  cyl disp  hp drat    wt  qsec vs am gear carb  mpg
Mazda RX4           6  160 110 3.90 2.620 16.46  0  1    4    4 21.0
Mazda RX4 Wag       6  160 110 3.90 2.875 17.02  0  1    4    4 21.0
Datsun 710          4  108  93 3.85 2.320 18.61  1  1    4    1 22.8
Hornet 4 Drive      6  258 110 3.08 3.215 19.44  1  0    3    1 21.4
Hornet Sportabout   8  360 175 3.15 3.440 17.02  0  0    3    2 18.7
Valiant             6  225 105 2.76 3.460 20.22  1  0    3    1 18.1
Run Code Online (Sandbox Code Playgroud)

根据?select,用法是

选择(.数据,...)

其中...是可变参数,它可以采用任意数量的列名、数字等。

求值的顺序是从左到右,因此第一个表达式被求值,然后是第二个,依此类推......