2016-08-27 4 views
0

У меня есть вектор, который выглядит следующим образом:Фильтр символов на основе первых двух элементов

data <- c("0115", "0159", "0256", "0211") 

Я хочу, чтобы фильтровать данные, основываясь на первых 2-х элементов моего вектора. Например:

группа 1 - элементы, которые начинаются с 01

2-й группы - элементы, которые начинаются с 02

Любая идея, как это сделать?

ответ

2

Возможно, вы захотите использовать Regular Expression (regex), чтобы найти строки, начинающиеся с «01» или «02».

Базовый подход - это использование grep(), которое возвращает индексы строк, которые соответствуют шаблону. Вот пример - заметьте, я изменил элементы 2-й и 4-й передачи данных, чтобы продемонстрировать, как просто поиск «01» или «02» приведет к неправильному ответу:

d <- c("0115", "0102", "0256", "0201") 

grep("01", d) 
#> [1] 1 2 4 

d[grep("01", d)] 
#> [1] "0115" "0102" "0201" 

Поскольку этот поиск «01» в любом месте, вы получаете «0201» в миксе. Для того, чтобы избежать, добавить «^» в шаблоне, чтобы указать, что строка начинается с «01»:

grep("^01", d) 
#> [1] 1 2 

d[grep("^01", d)] 
#> [1] "0115" "0102" 

Если вы используете пакет stringr, вы можете также использовать str_detect() таким же образом:

library(stringr) 

d[str_detect(d, "^01")] 
#> [1] "0115" "0102" 
Смежные вопросы