#r #gsub #comma
Вопрос:
Я хотел бы добавить запятую между числами во всех столбцах.
Мои данные в процентах, но они доставляются таким образом:
Percentage 3456 4444 325
Ожидаемые значения:
Percentage 34,56 44,44 32,5
Когда я использую gsub o sub, я не могу сохранить свой столбец как числовой. Не имеет значения, использую ли я «.» или», » в результате получается символ.
Спасибо!
Комментарии:
1.
paste(substr(Percentage, 1, 2), substr(Pecrentage, 3, 5), sep = ",")
?2. «не могу сохранить свой столбец как числовой» — всякий раз, когда вы пытаетесь добавить строку к числам, целое станет строкой. Что вы пытаетесь сделать, преобразовать их
,
в десятичное число на основе локали?3. @AllanCameron, который работает, но столбец становится lt;chrgt;
4. @r2evans Я пытаюсь составить число из одной или двух цифр, остальные-десятичные дроби.
5. Клара, я думаю, ты не поняла мою мысль. Во-первых: использование
gsub
илиpaste
или аналогичной строковой функции всегда преобразует число в строку, точка. Во-вторых, вы используете языковой стандарт, в котором запятая отделяет целые числа (слева) от дробных (справа)? Если ваш язык основан на запятых, то почему ваш номер в первую очередь считывается неправильно? Если ваш R уже настроен на запятую, вы можете использоватьx / ifelse(x lt; 1000, 10, 100)
?
Ответ №1:
Мы можем использовать comma
из formattable
которых будем изменять format
, сохраняя numeric
при этом все как есть
df1$Percentage lt;- formattable::comma(df1$Percentage, big.interval = 2, digits = 0)
-проверка
gt; df1 Percentage 1 34,56 2 44,44 3 3,25 gt; str(df1) 'data.frame': 3 obs. of 1 variable: $ Percentage: 'formattable' int 34,56 44,44 3,25 ..- attr(*, "formattable")=List of 4 .. ..$ formatter: chr "formatC" .. ..$ format :List of 4 .. .. ..$ format : chr "f" .. .. ..$ big.mark : chr "," .. .. ..$ digits : num 0 .. .. ..$ big.interval: num 2 .. ..$ preproc : NULL .. ..$ postproc : NULL
Также можно выполнять вычисления, так как это числовой столбец
gt; df1$Percentage * 100 [1] 34,56,00 44,44,00 3,25,00
данные
df1 lt;- structure(list(Percentage = c(3456L, 4444L, 325L)), class = "data.frame", row.names = c(NA, -3L))
Комментарии:
1. Спасибо! это сработало, но тип значения «lt;formttblgt;», и когда я сохраняю его в excel и открываю, цифры отображаются без запятой
2. @Clara вы не можете иметь
numeric
тип как таковой и иметь,
. таблица форматирования изменяет символ, изменяя формат. Однако не совсем ясно, что касается части excel. Это может быть проблемой при форматировании excel3. А если я использую «.»? Я хочу указать, где начинаются десятичные цифры. Спасибо!
4. @Clara Тогда вы можете просто
format
и конвертировать вnumeric
сas.numeric
помощью т. е.as.numeric(format(df1$Percentage, big.mark =".", big.interval = 2))#[1] 34.56 44.44 3.25
5. Большое вам спасибо! Это сработало!
Ответ №2:
Мы можем сделать это по-другому:
library(stringr) library(dplyr) x lt;- c("3333", "4223", "34215") P1 lt;- x %gt;% str_replace_all("(^\d{2})", "\1.") %gt;% as.double() %gt;% data.frame() colnames()[1] lt;- "Percentage"
Результат:
gt; P1 Percentage 1 33.330 2 42.230 3 34.215