#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\
, чтобы «экранировать» его, потому(...)?
означает, что содержимое круглых скобок может быть там, а может и не быть.\.
является десятичной точкой..
является специальным символом в регулярном выражении: он может обозначать любой символ. Поэтому, если вы на самом деле имеете в виду.
, вам нужно «экранировать» его [дважды, потому что снова\d
означает, что может быть одна или несколько цифр, в то время\d*
как означает, что может быть ноль или более цифр.
Комментарии:
1. если у меня есть число с плавающей запятой, например, 100,5 евро? Я не могу его использовать
2. Где я мог бы увидеть всю часть? например, «^ \ d \.? \ d *», потому что я не знаю всех комбинаций, но это очень полезно
3. проверьте
?base::regex
4. является ли ответ тем, что вы искали?
5. хорошо! и не могли бы вы объяснить мне, какой вы его использовали? Потому что я хотел бы понять. Спасибо!!