Я использую R, и мне нужно отформатировать число в кадре данных, в частности, путем наложения числа цифр перед десятичным разделителем, а также после.Например, 3.56
должно стать "0003,56000"
.
Итак, я построил свою собственную функцию:
format <- function(x, nbr_before_comma, nbr_after_comma){
x= round(x, nbr_after_comma)
x = toString(x)
l = strsplit(x, "[.]")[[1]]
#print(l)
#print(nchar(l[2]))
before_comma = paste0(strrep("0",nbr_before_comma - nchar(l[1])),l[1])
after_comma = ifelse(length(l) > 1,
paste0(l[2],strrep("0",nbr_after_comma - nchar(l[2]))),
strrep("0", nbre_after_comma))
res = paste0(before_comma, ",", after_comma)
return(res)
}
Попытка использовать один номер будет работать.Сейчас я пытаюсь применить это к кадру данных.Давайте возьмем игрушечный пример:
df <- data.frame("a" = c(2.5,3.56,4.5))
Я определил более точно, что я хочу:
format44 <- function(x){
return(format(x,4,4))
}
Я испробовал несколько возможностей:
df[] <- lapply(df, format44)
с dplyr
:
df <- df %>%
mutate(a = format44(a))
и наконец:
df["a"] <- lapply(df["a"],format44)
Ничего не будет работать.на самом деле, я получаю один и тот же вывод каждый раз:
a
1 0002,5, 3
2 0002,5, 3
3 0002,5, 3
Есть идеи, в чем проблема?