例如,我想删除字段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()))
顺序可以更改 - 即将需要删除的列作为最后一个条目
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,用法是
选择(.数据,...)
其中...是可变参数,它可以采用任意数量的列名、数字等。
求值的顺序是从左到右,因此第一个表达式被求值,然后是第二个,依此类推......