提问人:sdS 提问时间:2/12/2022 更新时间:2/12/2022 访问量:45
使用 R 删除名称具有特定命名顺序的列
Using R to delete column with names of that have certain naming sequence
问:
我正在尝试使用 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)
))
任何帮助都是值得赞赏的,谢谢!
答:
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()
character
vector
as.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)
评论