Подмножество фрейма данных на основе подчеркивания в конце имени элемента

Я работаю с фреймом данных, в котором одни и те же элементы встречаются более одного раза. В этом случае исходное вхождение показано как element_1 в первом столбце, а все повторяющиеся элементы показаны как element_2, element_3 и т. Д. Вот как это выглядит:

Bear<-c("X03419","X10875_1","X10875_2","X12553","X32463_1","X32463_2","X32463_3")
Year<-c(2007,2008,2018,2005,2007,2005,2008)
Data<-data.frame(Bear,Year)
Data

Bear     Year
X03419   2007
X10875_1 2008
X10875_2 2018
X12553   2005
X32463_1 2007
X32463_2 2005
X32463_3 2008

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

Кто-нибудь знает, как это сделать?

3 ответа

Мы могли бы использовать greplчтобы получить подмножество строк. Сопоставьте шаблон в столбце "Медведь", проверив, есть ли одна или несколько цифр (\\d+), которые успешно _ в конце ($) строки и отрицать (!), чтобы вернуть строки без этих случаев

subset(Data, !grepl('_\\d+$', Bear))
#    Bear Year
#1 X03419 2007
#4 X12553 2005

Или если намерение состоит в том, чтобы удалить только _1

subset(Data, !grepl('_1$', Bear))
#      Bear Year
#1   X03419 2007
#3 X10875_2 2018
#4   X12553 2005
#6 X32463_2 2005
#7 X32463_3 2008

С помощью dplyr, мы можем выполнить фильтрацию при условии, что включен "_":

Bear<-c("X03419","X10875_1","X10875_2","X12553","X32463_1","X32463_2","X32463_3")
Year<-c(2007,2008,2018,2005,2007,2005,2008)
Data<-data.frame(Bear,Year)

library(dplyr)

Data = Data %>% 
  dplyr::filter(!grepl('_', Bear))

Другой способ сделать

filter_at(Data, vars(Bear), ~ !grepl("_(?:1)", Bear))
#       Bear Year
# 1   X03419 2007
# 2 X10875_2 2018
# 3   X12553 2005
# 4 X32463_2 2005
# 5 X32463_3 2008
  • _(?:1): не соответствует строке, содержащей _1
Другие вопросы по тегам