удаление векторов из фрейма данных с помощью суффикса в r - PullRequest
1 голос
/ 23 сентября 2019

Некоторые векторы во фрейме данных have включают суффикс _rc_1.Я хочу удалить эти векторы из фрейма данных.Я пробовал несколько вариантов и получаю ошибки, которые показывают, что я что-то неправильно понимаю.Например:

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

Я не знаю, как решить проблему.

Возможно, это лучше всего сделать с grepl() и регулярным выражением, но я изо всех сил пытаюсь реализоватьверсия, которая также работает в соответствии с планом.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

В базе R вы можете использовать grepl, чтобы получить логический вектор с длиной, равной ncol(mydata), которая равна TRUE для имен столбцов, заканчивающихся на _rc_1 ($ гарантирует, что _rc_1 будет в конце).Затем после замены TRUE s и FALSE s на ! вы можете установить подкадр данных с помощью [].

newdata <- mydata[!grepl('_rc_1$', names(mydata))]
1 голос
/ 23 сентября 2019

contains работа с dplyr Если нам нужно использовать subset (функция base R), используйте grep, который может взять шаблон регулярного выражения и вернуть либо числовой индекс, либо имена столбцов как * 1006.* аргумент в subset может принимать оба значения в качестве допустимых значений

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

Кроме того, startsWith/endsWith в base R для совпадений префикса / суффикса

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

Indplyr, select_helpers - contains работает с select

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...