这个问题在这里已有答案:
我有兴趣简化使用dplyr删除列的方式(版本> = 0.7) . 假设我有一个名字的字符向量 .
drop <- c("disp", "drat", "gear", "am")
选择列
使用dplyr的current version版本,您可以执行以下选择:
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和base R.但是,我想知道是否有一种方法不涉及在data.frame中为每个列名找到整数位置 .
2 回答
使用
modify_at
并将列设置为NULL
,这将删除它们:更接近您的尝试,您可以尝试
magrittr::extract
而不是dplyr::select
您可以将
-one_of(drop)
与select
一起使用:one_of
将字符向量中的列名称计算为整数,类似于which(... %in% ...)
: