我对简化使用dplyr(版本> = 0.7)删除列的方式感兴趣。假设我有一个名字的字符向量。
drop <- c("disp", "drat", "gear", "am")
Run Code Online (Sandbox Code Playgroud)
使用dplyr 的当前版本,您可以执行以下选择:
dplyr::select(mtcars, !! rlang::quo(drop))
Run Code Online (Sandbox Code Playgroud)
甚至使用基数R更容易:
mtcars[, drop]
Run Code Online (Sandbox Code Playgroud)
删除列名是另一回事。我们可以使用每个未加引号的列名将其删除:
dplyr::select(mtcars, -disp, -drat, -gear, -am)
Run Code Online (Sandbox Code Playgroud)
但是,如果您有一个包含数百列的data.frame,那么这不是一个很好的解决方案。我所知道的最佳解决方案是使用:
dplyr::select(mtcars, -which(names(mtcars) %in% drop))
Run Code Online (Sandbox Code Playgroud)
这非常简单,并且适用于dplyr和baseR。但是,我想知道是否有一种方法不涉及在data.frame中为每个列名称查找整数位置。