use*_*485 4 select r string-matching ends-with dplyr
我可以使用dplyr :: select(ends_with)选择适合多种条件的列名称。考虑到我的列名,我想使用结尾于而不是包含或匹配项,因为我要选择的字符串在列名的末尾相关,但也可能出现在其他中间。例如,
df <- data.frame(a10 = 1:4,
a11 = 5:8,
a20 = 1:4,
a12 = 5:8)
Run Code Online (Sandbox Code Playgroud)
我想选择以1或2结尾的列,以仅具有a11和a12列。select(ends_with)是最好的方法吗?
谢谢!
从版本1.0.0开始,您可以使用布尔逻辑(例如!
(否定)、&
(和)和|
(或))组合多个选择。
### Install development version on GitHub first until CRAN version is available
# install.packages("devtools")
# devtools::install_github("tidyverse/dplyr")
library(dplyr, warn.conflicts = FALSE)
df <- data.frame(a10 = 1:4,
a11 = 5:8,
a20 = 1:4,
a12 = 5:8)
df %>%
select(ends_with("1") | ends_with("2"))
#> a11 a12
#> 1 5 5
#> 2 6 6
#> 3 7 7
#> 4 8 8
Run Code Online (Sandbox Code Playgroud)
或使用num_range()
选择所需的列
df %>%
select(num_range(prefix = "a", range = 11:12))
#> a11 a12
#> 1 5 5
#> 2 6 6
#> 3 7 7
#> 4 8 8
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2020-02-17 创建
您也可以使用正则表达式执行此操作。我知道您最初不想使用匹配项,但是如果使用“ string of end”符号,它实际上可以很好地工作$
。用分隔各个结尾|
。
df <- data.frame(a10 = 1:4,
a11 = 5:8,
a20 = 1:4,
a12 = 5:8)
df %>% select(matches('1$|2$'))
a11 a12
1 5 5
2 6 6
3 7 7
4 8 8
Run Code Online (Sandbox Code Playgroud)
如果你有一个长长的清单更复杂的例子,使用paste0
用collapse = '|'
。
dff <- data.frame(a11 = 1:3,
a12 = 2:4,
a13 = 3:5,
a16 = 5:7,
my_cat = LETTERS[1:3],
my_dog = LETTERS[5:7],
my_snake = LETTERS[9:11])
my_cols <- paste0(c(1,2,6,'dog','cat'),
'$',
collapse = '|')
dff %>% select(matches(my_cols))
a11 a12 a16 my_cat my_dog
1 1 2 5 A E
2 2 3 6 B F
3 3 4 7 C G
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4255 次 |
最近记录: |