Выберите строки, которые начинаются с шаблона в R - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю с базой данных R, которая имеет 3 столбца с именами index, NAICS и HS2.Заголовок базы данных выглядит следующим образом:

> head(base_sec)
        Index  NAICS    HS2
1   0.4074128   1111 010110
2   0.2858026  11111 010190
3   0.1103720  11112 010210
4  -0.8084129 111120 010290
5   0.5376827 111130 010310
6   0.6021241  11114 010391

Что ж, я хочу выбрать строки, в которых столбец NAICS соответствует заданному условию.Более конкретно, я хочу выбрать строки, в которых NAICS начинается с любого из следующих значений:

  list=c("111","112", "113","114",
          "115", "211", "212", "213",
         "3111", "3112", "3113", "3114",
         "3115", "3116","3117", "3118",
          "3119", "321")

Знаете ли вы, как решить эту проблему?любая идея ценится.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Регулярные выражения работают здесь.В конечном итоге нам нужно что-то вроде:

grepl("^(11112|11113|11114)", x$NAICS)

, где нас интересуют три строки , начинающиеся NAICS идентификаторы.(Я сократил это здесь для краткости.

Ваши данные, например, немного усечены:

x <- read.table(header=TRUE, text="
        Index  NAICS    HS2
1   0.4074128   1111 010110
2   0.2858026  11111 010190
3   0.1103720  11112 010210
4  -0.8084129 111120 010290
5   0.5376827 111130 010310
6   0.6021241  11114 010391")

l <- c("11112", "11113", "11114")

Чтобы программно сделать это:

paste0("^(", paste(l, collapse="|"), ")")
# [1] "^(11112|11113|11114)"

Итак, мыможно сделать:

grepl(paste0("^(", paste(l, collapse="|"), ")"), x$NAICS)
# [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE

и в конечном итоге

x[grepl(paste0("^(", paste(l, collapse="|"), ")"), x$NAICS),]
#        Index  NAICS   HS2
# 3  0.1103720  11112 10210
# 4 -0.8084129 111120 10290
# 5  0.5376827 111130 10310
# 6  0.6021241  11114 10391
0 голосов
/ 05 декабря 2018

Попробуйте:

out = x[substr(x$NAICS, 0, 3) %in% list | substr(x$NAICS, 0, 4) %in% list,]

Надеюсь, это поможет.

...