Подмножество фрейма данных на основе подчеркивания в конце имени элемента
Я работаю с фреймом данных, в котором одни и те же элементы встречаются более одного раза. В этом случае исходное вхождение показано как 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