使用 dplyr 删除列

标签 r dplyr

我有兴趣简化使用 dplyr(版本 >= 0.7)删除列的方式。假设我有一个名称字符向量。

drop <- c("disp", "drat", "gear", "am")

选择列

current version dplyr 版本,您可以使用以下命令执行选择:

dplyr::select(mtcars, !! rlang::quo(drop))

或者使用基本 R 更容易:

mtcars[, drop]

删除列

删除列名是另一回事。我们可以使用每个不带引号的列名称来删除它们:

dplyr::select(mtcars, -disp, -drat, -gear, -am)

但是,如果您有一个包含数百列的 data.frame,这不是一个很好的解决方案。我知道的最好的解决方案是使用:

dplyr::select(mtcars, -which(names(mtcars) %in% drop))

这相当简单,并且适用于 dplyr 和基本 R。但是,我想知道是否有一种方法不涉及在 data.frame 中查找每个列名称的整数位置。

最佳答案

使用modify_at并将列设置为NULL,这将删除它们:

mtcars %>% modify_at(drop,~NULL)
#                    mpg cyl  hp    wt  qsec vs carb
# Mazda RX4         21.0   6 110 2.620 16.46  0    4
# Mazda RX4 Wag     21.0   6 110 2.875 17.02  0    4
# Datsun 710        22.8   4  93 2.320 18.61  1    1
# Hornet 4 Drive    21.4   6 110 3.215 19.44  1    1
# Hornet Sportabout 18.7   8 175 3.440 17.02  0    2
# Valiant           18.1   6 105 3.460 20.22  1    1
# ...

更接近您所尝试的,您可以尝试 magrittr::extract 而不是 dplyr::select

extract(mtcars,!names(mtcars) %in% drop) # same output

关于使用 dplyr 删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46614385/

相关文章:

正则表达式 法国城市邮政编码

r - 使用 dplyr::mutate 计算某些列的平均值

r - 连接quosures和字符串

返回 R 数据框中的行,其中每个组根据条件有最大值

r - eval(expr, envir, enclos) 中的预测错误 : object not found in R

arrays - 如何创建和绑定(bind)空多维数组

html - 在 R 中抓取具有多个选项卡的网页

R:根据一天中的时间有效地对数据框进行子集化

r - left_join 表示列不存在,即使它存在

使用 dplyr 删除重复行