首页 > 解决方案 > 如何根据列名向量过滤 R 中的数据框?

问题描述

我有一个列名向量,我想用它来过滤mtcars数据框:

columns <- c("gear", "carb", "cyl")

我尝试了以下方法,但收到错误消息:

filt_df <- mtcars %>% filter(columns == "4")
Error: Result must have length 32, not 3

filt_df <- mtcars %>% filter_at(vars(columns) == "4")
Error: `.vars` must be a character/numeric vector or a `vars()` object, not a logical vector

让它工作的正确语法是什么?

标签: r

解决方案


认为你正在尝试做这样的事情(注意我稍微改变了你的谓词,因为没有mtcarshave的行gear == carb == cyl == 4):

library(dplyr)

columns <- c("gear", "carb", "cyl")

mtcars %>% filter(across(all_of(columns), ~ .x <= 4))
#>                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#> Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#> Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
#> Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#> Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
#> Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
#> Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
#> Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

推荐阅读