Сопоставление строки rstudio

#r

#r

Вопрос:

У меня есть этот столбец в моем фрейме данных

 df[column] = 10$ , 20eur, 10eur, 8$......
  

Я хотел бы получить с помощью Rstudio числа с «eur» и изменить на $. Затем это изменение, удалите строки $ и eur. Я пытался использовать str_extract, но это не сработало.

Спасибо!

Комментарии:

1. См ?sub . Обратите также внимание, что правильный тег должен быть r , не rstudio который не имеет отношения к этому вопросу.

2. @Jean-ClaudeArbaut Я меняю тег. Спасибо!

3. Поскольку вы используете stringr , вы могли бы использовать str_replace(x, 'eur', '$') . help(str_replace) Подробнее см.. Это похоже на gsub .

4. вы хотите конвертировать евро в доллары с фиксированным коэффициентом? Или просто извлеките числа?

5. отличный вопрос от edo. Если вы действительно хотите конвертировать eur в usd, вы можете использовать что-то вроде rows <- grepl(df$column, 'eur$'); values <- as.numeric(gsub('eur', '', df[rows, column]); df[rows, column] <- paste(round(values * 1.18, 0), '$') . Это предполагает валютный курс EURUSD 1,18. Первая часть находит строки, заканчивающиеся на ‘eur’, затем мы удаляем eur и меняем его на числовое значение. Последнее мы умножаем на обменный курс EURUSD, округляем его до полного значения ( round(x, 0) ) и используем paste для добавления знака доллара в конце.

Ответ №1:

Учитывая ваш ввод:

 df <- data.frame(column = c("10$", "20eur", "10eur", "8$", "100.5eur"))
  

Вы можете сделать следующее:

 library(stringr)

# extract numbers
df$value <- as.numeric(str_extract(df$column, "^\d (\.\d*)?"))

# extract the currency
df$currency <- str_remove_all(df$column, "^\d (\.\d*)?")

# convert with a fixed ratio when necessary
ratio <- 1.25 # 1$ = 0.8eur ==> 1eur = 1.25$
df$converted_value <- ifelse(df$currency == "eur", df$value * ratio, df$value)

df
#>     column value currency converted_value
#> 1      10$  10.0        $          10.000
#> 2    20eur  20.0      eur          25.000
#> 3    10eur  10.0      eur          12.500
#> 4       8$   8.0        $           8.000
#> 5 100.5eur 100.5      eur         125.625
  

С dplyr :

 library(dplyr)
df <- df %>% 
 mutate(value = as.numeric(str_extract(column, "^\d (\.\d*)?")),
        currency = str_remove_all(column, "^\d (\.\d*)?")) %>% 
 mutate(converted_value = if_else(currency == "eur", value * ratio, value))
  

Вот краткое объяснение, как это прочитать:

 "^\d (\.\d*)?"
  

Это способ считывания десятичных чисел с помощью регулярного выражения.

  • ^ обозначает начало строки. Это означает, что вы ищете что-то, что начинается с того, что следует ^
  • d обозначает цифры. Вам нужен double \ , чтобы «экранировать» его, потому что это специальный символ, и вы не можете писать самостоятельно в большинстве R regeces.
  • (...)? означает, что содержимое круглых скобок может быть там, а может и не быть.
  • \. является десятичной точкой. . является специальным символом в регулярном выражении: он может обозначать любой символ. Поэтому, если вы на самом деле имеете в виду . , вам нужно «экранировать» его [дважды, потому что снова это специальный символ].
  • \d означает, что может быть одна или несколько цифр, в то время \d* как означает, что может быть ноль или более цифр.

Комментарии:

1. если у меня есть число с плавающей запятой, например, 100,5 евро? Я не могу его использовать

2. Где я мог бы увидеть всю часть? например, «^ \ d \.? \ d *», потому что я не знаю всех комбинаций, но это очень полезно

3. проверьте ?base::regex

4. является ли ответ тем, что вы искали?

5. хорошо! и не могли бы вы объяснить мне, какой вы его использовали? Потому что я хотел бы понять. Спасибо!!