Добавьте запятую после двух цифр в R?

#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. Это может быть проблемой при форматировании excel

3. А если я использую «.»? Я хочу указать, где начинаются десятичные цифры. Спасибо!

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