使用 R 删除名称具有特定命名顺序的列

Using R to delete column with names of that have certain naming sequence

提问人:sdS 提问时间:2/12/2022 更新时间:2/12/2022 访问量:45

问:

我正在尝试使用 dplyr 中的 select 函数来摆脱具有特定模式的列名。

具体来说,假设我有变量名称:

p1_first......1

p1_middle......2

p1_last......3

p1_first......7

p1_middle......9

p1_last......11

我想删除以“...7", "...9", & "...11“,保留那些带有”......1", "...2", "...3".因此,生成的数据集将保留名称:

p1_first......1

p1_middle......2

p1_last......3

我尝试了以下方法(没有成功):

 data %>% 
  select(-c(num_range("p1_", 7:11)
            ))

任何帮助都是值得赞赏的,谢谢!

r dplyr tidyverse

评论


答:

3赞 TarJae 2/12/2022 #1
library(dplyr)
df %>% 
  select(-ends_with(c("...7", "...9", "...11")))

例:

my_colnames <- c("p1_first...1", "p1_middle...2", "p1_last...3", 
"p1_first...7", "p1_middle...9", "p1_last...11")

df <- mtcars[,1:6]

colnames(df) <- my_colnames
df %>% 
  select(-ends_with(c("...7", "...9", "...11")))

 
                    p1_first...1 p1_middle...2 p1_last...3
Mazda RX4                   21.0             6       160.0
Mazda RX4 Wag               21.0             6       160.0
Datsun 710                  22.8             4       108.0
Hornet 4 Drive              21.4             6       258.0
Hornet Sportabout           18.7             8       360.0
Valiant                     18.1             6       225.0
Duster 360                  14.3             8       360.0
Merc 240D                   24.4             4       146.7
Merc 230                    22.8             4       140.8
Merc 280                    19.2             6       167.6
Merc 280C                   17.8             6       167.6
Merc 450SE                  16.4             8       275.8
Merc 450SL                  17.3             8       275.8...
1赞 Onyambu 2/12/2022 #2

您可以将该函数与一些正则表达式一起使用:matches

data %>%
  select(-matches('\\.(7|9|11)$'))
0赞 Dan Adams 2/12/2022 #3

您可以使用序列指定要删除的数字,如果您的情况比 3 列更复杂,这可能会有所帮助。请注意,您需要提供一个,因此必须将其转换为。dplyr::select()charactervectoras.character()

library(tidyverse)

d <- data.frame(p1_first...1 = 1:5, p1_middle...2 = 1:5, p1_last...3 = 1:5, p1_first...7 = 1:5, p1_middle...9 = 1:5, p1_last...11 = 1:5)

d %>% select(-ends_with(as.character(seq(7, 11, 2))))
#>   p1_first...1 p1_middle...2 p1_last...3
#> 1            1             1           1
#> 2            2             2           2
#> 3            3             3           3
#> 4            4             4           4
#> 5            5             5           5

创建于 2022-02-11 由 reprex 包 (v2.0.1)