2016-12-09 2 views
2

У меня есть фрейм данных, который я использую под названием «fish».Как изменить значения, которые начинаются с определенной буквы в NA (в R)

Кадр данных имеет 3 разных переменных. Одна из переменных называется «вид».

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

Я знаю, как изменить его на NA, когда вы делаете все имя вида, но как вы это делаете для только видов, которые СТАРТ с буквой M?

Я попытался это:

fish$species[fish$species=="^M_"] <- NA 

Но это не работает. Может ли кто-нибудь помочь?

+0

Чтобы проверить соответствие шаблону, вам понадобится функция 'grepl', а не' == '. – Frank

+0

Спасибо, я видел вещи там, используя gsub и grep. Но можете ли вы помочь мне с кодом? Я буквально заменяю == на «grep1»? – newtoallthis

+0

Ах, я забыл, что R добавил функцию 'startWith' (в ответе ниже), но использование grepl описано в документах на'? Grepl'. Обычно вы делаете что-то вроде 'x [grepl (patt, x)] <- y'. 'grep' также можно использовать здесь, благодаря многократным способам R-индексации вектора (по логическому или по номеру позиции, описанному в любом учебном руководстве по R). – Frank

ответ

5

Вы можете использовать функцию замены is.na<-() вместе с startsWith().

is.na(fish$species) <- startsWith(fish$species, "M") 

Согласно R документации help(startsWith),

startsWith() эквивалентно, но гораздо быстрее, чем grepl("^<prefix>", x), где prefix не содержит специальные символы регулярных выражений.

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

is.na(levels(fish$species)) <- startsWith(levels(fish$species), "M") 

Другим способом было бы заменить levels<-(), используя NA для замены на правой руке стороне.

levels(fish$species)[startsWith(levels(fish$species), "M")] <- NA 

Обратите внимание, что вы определенно можете использовать grepl(), если вы хотите, но этот вопрос, кажется, как хороший пример использования новой функции startsWith().

Также обратите внимание, что все они были успешно протестированы в наборе данных iris.

+0

Это сработало, оно сработало !!!!!!! Поэтому, чтобы сделать это, мне пришлось изменить переменную от фактора к персонажу. Это не огромная сделка, но есть ли способ сохранить это как фактор? Это дает мне ошибку (несимвольный объект), если я оставлю в качестве фактора. – newtoallthis

+1

Должен иметь возможность сделать это с помощью 'is.na (fish $ species) <- startsWith (as.character (fish $ species)," M ")'. Это не изменит вектор на символ. –

+0

@newtoallthis - Я тоже это заметил. Сделано редактирование. –

Смежные вопросы