Извлечение определенных элементов из вектора символов

Я попробовал вышеуказанное решение, но я счел его непригодным для больших объемов данных. Затем я обнаружил функцию потока:

MongoClient.connect("...", function(err, db){
    var c = db.collection('yourCollection');
    var s = c.find({/* your query */}).stream();
    s.on('data', function(doc){
        c.update({_id: doc._id}, {$set: {name : doc.firstName + ' ' + doc.lastName}}, function(err, result) { /* result == true? */} }
    });
    s.on('end', function(){
        // stream can end before all your updates do if you have a lot
    })
})
-1
задан Ronak Shah 16 January 2019 в 06:56
поделиться

5 ответов

обычный grep также отлично справится

grep( "^m", a, ignore.case = TRUE, value = TRUE )
#[1] "Mom"    "mother"

тесты
ответ Тома (начинается с) - победитель, но есть место для улучшения (проверьте код startsWith2)

microbenchmark::microbenchmark(
  substr = a[substr(a, 1, 1) %in% c("M", "m")],
  grepl = a[grepl("^[Mm]", a)],
  grep = grep( "^m", a, ignore.case = TRUE, value = TRUE ),
  stringr = unlist(stringr::str_extract_all(a,regex("^M.*",ignore_case = T))),
  startsWith1 = a[startsWith(toupper(a), "M")],
  startsWith2= a[startsWith(a, c("M", "m"))]
)


# Unit: nanoseconds
#        expr   min      lq     mean median    uq    max neval
#      substr  1808  2411.0  3323.19   3314  3917   8435   100
#       grepl  3916  4218.0  5438.06   4820  6930   8436   100
#        grep  3615  4368.5  5450.10   4820  6929  19582   100
#     stringr 50913 53023.0 55764.10  54529 55132 174432   100
# startsWith1  1506  2109.0  2814.11   2711  3013  17474   100
# startsWith2   602  1205.0  1410.17   1206  1507   3013   100
0
ответ дан Wimpel 16 January 2019 в 06:56
поделиться

Использование stringr

 library(stringr)
   unlist(str_extract_all(a,regex("^M.*",ignore_case = T)))



[1] "Mom"    "mother"
0
ответ дан NelsonGon 16 January 2019 в 06:56
поделиться

Используйте grepl с шаблоном ^[Mm]:

a[grepl("^[Mm]", a)]

[1] "Mom"    "mother"

Вот что означает шаблон ^[Mm]:

^      from the start of the string
[Mm]   match either a lowercase or uppercase letter M

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

0
ответ дан Tim Biegeleisen 16 January 2019 в 06:56
поделиться

substr - очень удобная базовая функция R:

a[substr(a, 1, 1) %in% c("M", "m")]

# [1] "Mom"    "mother"

И поскольку вы упомянули sub(), то вы могли бы сделать (хотя и не обязательно рекомендуется):

a[sub("(.).*", "\\1", a) %in% c("M", "m")]
0
ответ дан sindri_baldur 16 January 2019 в 06:56
поделиться
a[startsWith(toupper(a), "M")]
0
ответ дан Tom Fehring 16 January 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: