r - 当您具有colnames的字符向量时,如何不使用select()dplyr选择列?

标签 r dplyr

我正在尝试使用dplyr取消选择数据集中的列,但是自昨晚以来我无法实现。

我非常了解解决方法,但是我正在严格尝试仅通过dplyr查找答案。

library(dplyr)
df <- tibble(x = c(1,2,3,4), y = c('a','b','c','d'))
df %>% select(-c('x'))


给我一个错误:-c(“ x”)中的错误:一元运算符的参数无效

现在,我知道select接受不带引号的值,但是我不能以这种方式进行子选择。

请注意,以上数据集仅是示例,我们可以有很多列。

谢谢,

优先

最佳答案

编辑:OP的实际问题是关于如何使用字符向量从数据框中选择或取消选择列。为此使用one_of()辅助函数:

colnames(iris)

# [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

cols <- c("Petal.Length", "Sepal.Length")

select(iris, one_of(cols)) %>% colnames

# [1] "Petal.Length" "Sepal.Length"

select(iris, -one_of(cols)) %>% colnames

# [1] "Sepal.Width" "Petal.Width" "Species"


您应该查看选择助手(类型?select_helpers),因为它们非常有用。从文档:

starts_with():以前缀开头

ends_with():以前缀结尾

contains():包含文字字符串

matches():匹配正则表达式

num_range():数值范围,例如x01,x02,x03。

one_of():字符向量中的变量。

everything():所有变量。



给定一个数据列的名称为a:z的数据框,请使用select像这样:

select(-a, -b, -c, -d, -e)

# OR

select(-c(a, b, c, d, e))

# OR

select(-(a:e))

# OR if you want to keep b

select(-a, -(c:e))

# OR a different way to keep b, by just putting it back in

select(-(a:e), b)


因此,如果我想省略iris数据集中的两列,我可以说:

colnames(iris)

# [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

select(iris, -c(Sepal.Length, Petal.Length)) %>% colnames()

# [1] "Sepal.Width" "Petal.Width" "Species" 


但是,当然,最好的和最简洁的方法是使用select的帮助函数之一:

select(iris, -ends_with(".Length")) %>% colnames()

# [1] "Sepal.Width" "Petal.Width" "Species"   


附言您将带引号的值传递给dplyr很奇怪,它的一大优点是您不必一直都在输入引号。如您所见,裸值与dplyrggplot2可以正常工作。

关于r - 当您具有colnames的字符向量时,如何不使用select()dplyr选择列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49582602/

相关文章:

R 当前时间(以毫秒为单位)

r - 您如何用简单的英语阅读 %in% 运算符?

r - 在读入 R 之前检查文件的分隔方式

r - 取消选择 dplyr 中的变量

r - dplyr filter()与类似SQL的%wildcard%

r - 向下填充一列,递归地将函数应用于前一个值

r - dplyr::left_join 等价于 base::merge(..., all.x=TRUE) 吗?

r - 子类化包含名称为 : access by name 的列表的 S4 类

r - 我的 R 脚本是否相同?

r - 如何使用dplyr在R中按日期过滤并将月份分组在一起