Избавьтесь от рядов с частями строк - PullRequest
0 голосов
/ 22 января 2020

У меня есть фрейм данных individual_dets, в котором есть несколько строк, от которых я хочу избавиться

area                       year               Temp
BON-AR-S2                  2016               1.853
BON-W-S5                   2018               2.2
HFX 102                    2018               1.2
NSTR 525                   2017               2.0  
NSTR 787                   2017               2.3
HFX 101                    2016               1.9 
Boca Raton                 2015               20
Shutter                    2015               21
Shutter                    2017               1.3
Ketch                      2017               1.3
Ketch                      2018               1.9   

Я хочу сохранить только те строки, строки которых начинаются с NSTR, HFX и Boca raton строки ... как мне сохранить только эти .... или как мне избавиться от всего остального. Я пытался использовать кратные значения этого

individual_dets$area = filter(individual_dets, area != "BON-AR-S2")

Но он выводит совершенно другой фрейм данных без моих исходных данных, я также пытался

individual_dets = filter(individual_dets, area != "BON-AR-S2")

, но ничего не происходит ...

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

Ответы [ 2 ]

2 голосов
/ 22 января 2020

!= и == работают только на точных совпадениях. Если вы хотите сопоставить часть строки, вам нужно grepl. Вы также говорите, что строки должны начинаться с NSTR, HFX или Boca. Начало строки можно выразить с помощью регулярного выражения ^. Для более чем одного паттерна вы можете использовать |, который является регулярным выражением для или :

individual_dets = filter(individual_dets, grepl("^NSTR|^HFX|^Boca", area))
0 голосов
/ 22 января 2020

при поиске строк вы не используете ==, а скорее %in%

, если вы хотите вернуть data.frame без определенных строк, вы не пишете individual_dets$area =, а скорее df =. Первый из них изменит столбец в вашей таблице, второй создаст новый data.frame

, который вы можете использовать subset (base R) вместо filter (требуется dplyr)

все вместе:

df = subset(individual_dets, !area %in% "BON-AR-S2")

edit: как указано @JBGruber, используйте subset(individual_dets, !grepl("BON", area)), если вы хотите быть более общим в поиске строк

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