Эта страница на официальном сайте mongodb адресует точно этот вопрос:
http://docs.mongodb.org/ecosystem/tutorial/model-data- for-ruby-on-rails /
Когда мы показываем наш список историй, нам нужно будет показать имя пользователя, разместившего историю. Если бы мы использовали реляционную базу данных, мы могли бы выполнить соединение с пользователями и магазинами и получить все наши объекты в одном запросе. Но MongoDB не поддерживает объединения, и поэтому время от времени требуется бит денормализации. Здесь это означает кеширование атрибута «имя пользователя».
Реляционные пуристы уже чувствуют себя неловко, как будто мы нарушаем какой-то универсальный закон. Но давайте иметь в виду, что коллекции MongoDB не эквивалентны реляционным таблицам; каждая из которых служит уникальной проектной цели. Нормализованная таблица обеспечивает атомный изолированный кусок данных. Однако документ более тесно представляет собой объект в целом. В случае сайта социальных новостей можно утверждать, что имя пользователя является неотъемлемой частью истории, опубликованной.
blockquote>
Или, также как в base R
, используя endsWith
и substr
index <- which(endsWith(df$PlayerName, 'Q') | endsWith(df$PlayerName, 'Z'))
df$PlayerName[index] <- substr(df$PlayerName[index],
rep(1, length(index)),
nchar(df$PlayerName[index])-1L)
df
# PlayerName Score
# 1 John 75
# 2 Robert 80
# 3 Albert 67
# 4 Jeff 88
Причина в stri_sub(..., -2)
. Вам нужно указать от 1 до -2 символов, т.е.
library(stringi)
with(df, ifelse(stri_sub(PlayerName, -1, -1) %in% c('Q', 'Z'),
stri_sub(PlayerName, 1, nchar(PlayerName)-2), PlayerName))
#[1] "Joh" "Robert" "Alber" "Jef"
ДАННЫЕ
structure(list(PlayerName = c("JohnQ", "Robert", "AlbertZ", "JeffQ"
), Score = c(75L, 80L, 67L, 88L)), row.names = c(NA, -4L), class = "data.frame")
Почему бы не подставить R sub
с соответствующим регулярным выражением ?
library(tidyverse)
data <- data %>% mutate(PlayerName = sub("Z$|Q$", "", PlayerName))
data
# PlayerName Score
#1 John 75
#2 Robert 80
#3 Albert 67
#4 Jeff 88
Объяснение: символ $
отмечает конец строки, а |
разделяет альтернативные шаблоны , Поэтому "Z$|Q$"
соответствует либо "Z"
, либо "Q"
в конце строки.