R удаляет столбцы из фрейма данных, соответствующего шаблону - PullRequest
1 голос
/ 20 июня 2019

Я запускаю скрипт, который генерирует фреймы данных автоматически.В некоторых случаях я получаю столбцы с определенным шаблоном, таким как d123 или d3452.Это в основном символ d с несколькими цифрами.Количество цифр может быть только одна или иногда оно может достигать 4 символов.Я хочу удалить все столбцы, которые соответствуют этой конкретной модели.Пример кадра данных выглядит следующим образом:

df <- data.frame(d1234=c(1,2,3), b=c(3,4,5),c=c(4,5,3), d3245=c(3,2,4))

df выглядит следующим образом:

  d1234 b c d3245
1     1 3 4     3
2     2 4 5     2
3     3 5 3     4

Из этого я хочу удалить только первый и последний столбец, который соответствует шаблону.Я пробовал следующее:

df <- data.frame(d1234=c(1,2,3), b=c(3,4,5),c=c(4,5,3), d3245=c(3,2,4))
  colpat <- "[d[:digit:]]"
  if (colpat %in% names(df)) {
    d <- df[,!names(df) == colpat]  
  } else {
    d <- df
  }
  print(d)

Но все равно столбцы остаются

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Мы можем использовать grep для сопоставления регулярных выражений шаблона в имени столбца. Здесь шаблон должен проверять наличие буквы «d» в начале (^) строки, за которой следуют одна или несколько цифр (\\d+) до конца ($) строки, используйте invert = TRUE (по умолчанию это FALSE) и поднабор столбцов с числовым индексом

df[grep("^d\\d+$", names(df), invert = TRUE)]
#  b c
#1 3 4
#2 4 5
#3 5 3
2 голосов
/ 20 июня 2019

Для решения с обратной тенденцией вы можете использовать регулярное выражение в помощнике matches при выборе столбцов.

df %>%
  select(-matches("d\\d+$"))

  b c
1 3 4
2 4 5
3 5 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...