MongoDB позволяет вам использовать cursor.count()
даже при передаче limit()
или skip()
.
Допустим, у вас есть db.collection
с 10 элементами.
Вы может сделать:
async function getQuery() {
let query = await db.collection.find({}).skip(5).limit(5); // returns last 5 items in db
let countTotal = await query.count() // returns 10-- will not take `skip` or `limit` into consideration
let countWithConstraints = await query.count(true) // returns 5 -- will take into consideration `skip` and `limit`
return { query, countTotal }
}
Это делается с помощью инструментов Tidyverse, таких как pipe%>% и dplyr:
Разделяет столбец кода на два с указанным разделителем.
Поскольку «\» - это специальный символ в регулярном выражении, вы должны экранировать каждый \, который вы хотите найти, с другим.
Распространение преобразует его из высокой формы в широкую форму, как вам нужно.
library(dplyr)
df %>%
separate(code, into = c("colName", "value"), sep = "\\\\\\\\") %>%
spread(colName, value)
Мы можем определить функцию, которая находит положение факторной переменной, которая при использовании в качестве регулярного выражения находит совпадение в столбце code
:
find_match <- function(code, matches) {
apply(sapply(matches, grepl, code), 1, match, x=T)
}
Если совпадения нет, эта функция возвращает NA
для этой строки.
Далее, мы можем просто использовать mutate
из dplyr
, чтобы добавить каждый столбец факторов:
df %>% mutate(goal = find_match(code, goal),
area = find_match(code, area),
fr = find_match(code, fr))
Что дает:
var1 var2 code goal area fr
1 1 a goal\\\\meow 2 NA NA
2 2 b area\\\\bank NA 3 NA
3 3 c area\\\\bank NA 3 NA
4 4 d fr\\\\utilitarian NA NA 3
5 5 e fr\\\\history NA NA 2