Латинские числа (например, «xxv», «xxxv», «iii» и «ii») в R

Как преобразовать все латинские числа (например, «xxv», «xxxv», «iii» и «ii») в числовые значения в текстовых данных с помощью R?

Мне нужно преобразовать все латинские числа в текстовых данных в числовые значения. Есть ли какая-нибудь функция в R, которая может преобразовать все латинские числа сразу?

Кроме того, когда я заменяю по одной, что, если у меня в некоторых словах есть такие буквы, как «ii», «i»? Например, изменится ли мир «все еще» на «st1ll»?

Я не думаю, что это дубликат. ОП хочет заменить латинские цифры в тексте.

Stéphane Laurent 05.11.2022 09:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
txt <- 'How to convert all the Latin numbers (such as "xxv," "xxxv," "iii," and "ii") into numerical values in text data with R?
  
I need to convert all the Latin numbers in a text data into numerical values. Is there any function in R can convert all the Latin numbers at once?
  
In addition, when I replace one by one, what if I have some words contains letters like "ii", "i"? For example, would the world "still" be changed into "st1ll"?'

Получите вектор латинских символов (обратите внимание, если вы сделаете это слишком большим, gregexpr выдаст ошибку, однако я не проверял, каков предел - он где-то между 1e2 и 1e3)

Исключите «I», так как это, скорее всего, не будет цифрой, затем создайте свой шаблон и обработайте его как любую другую строку поиска/замены:

rom <- as.character(as.roman(1:1e2))
rom <- setdiff(rom, 'I')

p <- sprintf('\\b(%s)\\b', paste0(na.omit(rom), collapse = '|'))
m <- gregexpr(p, txt, ignore.case = TRUE)
regmatches(txt, m) <- lapply(regmatches(txt, m), function(x) as.numeric(as.roman(x)))

cat(txt)

# How to convert all the Latin numbers (such as "25," "35," "3," and "2") into numerical values in text data with R?
#   
# I need to convert all the Latin numbers in a text data into numerical values. Is there any function in R can convert all the Latin numbers at once?
#   
# In addition, when I replace one by one, what if I have some words contains letters like "2", "i"? For example, would the world "still" be changed into "st1ll"?

Как функция:

dd <- data.frame(
  texts = rep(txt, 5)
)

rom_to_num <- function(text, rom = 1:1e2, exclude = 'I') {
  rom <- as.character(as.roman(rom))
  rom <- setdiff(rom, exclude)
  
  p <- sprintf('\\b(%s)\\b', paste0(na.omit(rom), collapse = '|'))
  m <- gregexpr(p, text, ignore.case = TRUE)
  regmatches(text, m) <- lapply(regmatches(text, m), function(x) as.numeric(as.roman(x)))
  
  text
}

dd <- within(dd, {
  texts_new <- rom_to_num(texts)
})

Можно ли преобразовать только независимое латинское число (я имею в виду с пробелом впереди и после)? Я не хочу, чтобы "ii" и "iv" пропадали другими словами в тексте.

Emily 07.11.2022 09:29

Смотрите ответ на свой другой вопрос здесь: stackoverflow.com/questions/74399312/…

dufei 11.11.2022 11:18

@Emily Эмили, они даже не меняются в вашем примере

rawr 11.11.2022 16:19

Спасибо, вы правы. Ответ принят! У меня есть еще один дополнительный вопрос: моя структура данных представляет собой фрейм данных, и у меня есть текст в качестве переменной для более чем 1000 наблюдений. Я следовал вашему коду, и он хорошо работал для преобразования чисел. Но текст из каждого наблюдения сходится в единое целое и не соответствует наблюдению по отдельности. Как я могу решить эту проблему? Я новичок в R, и заранее спасибо :)

Emily 14.11.2022 17:30

@Emily, вам просто нужно применить код как цикл или создать функцию, см. правки

rawr 14.11.2022 19:15

Другие вопросы по теме