Следующая версия вашего кода работает для удаления запятых и замены их десятичными дробями, а также для удаления пробелов, но вы можете использовать встроенные средства R. Вместо этого, как показано ниже.
library(dplyr)
as.swedish <- function(from) as.numeric(gsub(" ", "", sub(",", ".", from)))
replace_commas <- function(df1, c_name) {
c_name <- enquo(c_name)
df1 %>% mutate_at(vars(!!c_name), as.swedish)
}
df %>% replace_commas(Saldo)
В следующем предположениичто существуют пробелы в виде разделителей тысяч и запятые в виде десятичных дробей, кроме 1а, в котором запятые принимаются только в качестве десятичных дробей.
1) read.csv2 Мы можем определить класс swedish
и затем использовать его вread.csv2
.При этом используется однострочная функция as.swedish
, определенная выше.
# test data
Lines <- "Letter;Number\nA;1 200,3\nB;32\nC;2511,01"
# define swedish class
setClass("swedish")
setAs("character", "swedish", as.swedish)
setAs("factor", "swedish", as.swedish)
read.csv2(text = Lines, colClasses = list(Number = "swedish"))
, дающая:
Letter Number
1 A 1200.30
2 B 32.00
3 C 2511.01
1a) Если у нас нет пробелов в тысячахразделители и имеют только запятые в качестве десятичных дробей, тогда мы можем использовать read.csv2:
Lines2 <- "Letter;Number\nA;1200,3\nB;32\nC;2511,01"
read.csv2(text = Lines2)
, давая:
Letter Number
1 A 1200.30
2 B 32.00
3 C 2511.01
2) преобразовать df или используя swedish
класс сверху для преобразования Saldo
в df
:
transform(df, Saldo = as(Saldo, "swedish"))
, давая:
Date Saldo
1 2018-12-15 123432.45
2 2018-11-04 87546.23
3 2018-10-26 9564.82
2a) Это также работает и использует только *Функция 1038 * сверху, но не класс swedish
.
transform(df, Saldo = as.swedish(Saldo))
или почти то же самое с функцией dplyr df %>% mutate(Saldo = as.swedish(Saldo))
3) для преобразования df илиопределите эту функцию, где names
- это символьный вектор имен столбцов для преобразования из шведского языка.Ни квази-цитата, ни соответствующие встроенные средства R не нужны, если мы передаем имена в виде символьных строк, что в любом случае кажется лучшим дизайном.При этом используется функция as.swedish
сверху, но не класс swedish
.
swedish <- function(data, names) replace(data, names, lapply(data[names], as.swedish))
swedish(df, "Saldo")
или
library(dplyr)
df %>% swedish("Saldo")