我有一个数据帧和该数据帧中我想要删除的列的列表。让我们以iris
数据集为例。我想删除Sepal.Length
和Sepal.Width
,只使用剩余的列。如何使用dplyr
包中的select
或select_
执行此操作?
这是我到目前为止尝试过的:
drop.cols <- c('Sepal.Length', 'Sepal.Width')
iris %>% select(-drop.cols)
-drop.cols中的
错误:一元运算符的参数无效
iris %>% select_(.dots = -drop.cols)
-drop.cols中的
错误:一元运算符的参数无效
iris %>% select(!drop.cols)
!drop.cols中的
错误:参数类型无效
iris %>% select_(.dots = !drop.cols)
!drop.cols中的
错误:参数类型无效
我觉得我遗漏了一些明显的东西,因为这些看起来是一个非常有用的操作,应该已经存在。在Github上,有人发布了a similar issue,哈德利说要使用“负索引”。这(我想)就是我试过的,但没有用。有什么建议吗?
发布于 2016-03-07 16:59:24
查看select_vars上的帮助。这给了你一些关于如何使用它的额外想法。
在您的案例中:
iris %>% select(-one_of(drop.cols))
发布于 2017-03-21 03:58:33
也可以试试
## Notice the lack of quotes
iris %>% select (-c(Sepal.Length, Sepal.Width))
发布于 2018-04-01 00:12:30
除了select(-one_of(drop.cols))
之外,还有两个使用select()
删除列的其他选项,这些选项不涉及定义所有特定的列名(使用dplyr starwar示例数据可以获得更多的列名):
starwars %>%
select(-(name:mass)) %>% # the range of columns from 'name' to 'mass'
select(-contains('color')) %>% # any column name that contains 'color'
select(-starts_with('bi')) %>% # any column name that starts with 'bi'
select(-ends_with('er')) %>% # any column name that ends with 'er'
select(-matches('^f.+s$')) %>% # any column name matching the regex pattern
select_if(~!is.list(.)) %>% # not by column name but by data type
head(2)
# A tibble: 2 x 2
homeworld species
<chr> <chr>
1 Tatooine Human
2 Tatooine Droid
https://stackoverflow.com/questions/35839408
复制相似问题