通过r中的后缀从数据框中删除向量

removing vectors from data frame by suffix in r

数据框 have 中的某些向量包含后缀 _rc_1。我想从数据框中删除这些向量。我尝试了几种选择并收到错误,表明我误解了某些东西。例如:

library(dplyr)
newdata <- subset(mydata, -contains("_rc_1"))
Error: No tidyselect variables were registered

我不知道我是如何解决这个问题的。

也许最好使用 grepl() 和正则表达式,但我正在努力实现一个也能按计划执行的版本。

containsdplyr 一起工作 如果我们需要使用 subsetbase R 函数),请使用 grep,它可以采用正则表达式模式和 return 数字索引或列名称本身作为 subset 中的 select 参数可以将两者都作为有效输入

subset(mydata, select = grep("_rc_1", names(mydata), value = TRUE, invert = TRUE))

此外,在 base R 中有 startsWith/endsWith 用于 prefix/suffix 匹配

subset(mydata, select = names(mydata)[!endsWith(names(mydata), "_rc_1")])

dplyr 中,select_helpers - containsselect

一起使用
library(dplyr)
mydata %>%
   select(-contains("_rc_1"))

可使用内置数据集重现'iris'

data(iris)
head(subset(iris, select = names(iris)[!endsWith(names(iris), "Length")]))
iris %>%  
    select(-contains('Sepal')) %>%
    head

在 base R 中,您可以使用 grepl 来获得长度等于 ncol(mydata) 的逻辑向量,对于以 _rc_1 结尾的列名称,它是 TRUE($确保 _rc_1 出现在最后)。然后在 TRUEs 和 FALSEs 与 ! 交换后,您可以使用 [].

对数据框进行子集化
newdata <- mydata[!grepl('_rc_1$', names(mydata))]