изменить фрейм данных, чтобы тысячи были разделены точками

На данный момент я работаю с RMarkdown и Pandoc. Мои data.frames в R выглядят так:

3.538e+01 3.542e+01 3.540e+01
9.583e+00 9.406e+00 9.494e+00
2.601e+05 2.712e+05 5.313e+05

После того, как я запустил pandoc, результат выглядит так:

35.380 35.420 35.400
9.583 9.406 9.494
260116.000 271217.000 531333.000

Как это должно выглядеть:

35,380 35,420 35,400
9,583  9,406  9,494
260.116 271.217 531.333

Поэтому я хочу запятые вместо точек и не хочу ни запятой, ни точки после 260116 (тысячи чисел). Точки для разделения тысячи были бы хороши. Есть ли способ напрямую изменить внешний вид в R или мне нужно установить параметры в вязке/уценке?

Спасибо


person beginneR    schedule 26.08.2013    source источник
comment
и, например, 3720651 должно быть представлено как 3.720.651   -  person beginneR    schedule 26.08.2013
comment
См. format и sprintf, возможно.   -  person A5C1D2H2I1M1N2O1R2T1    schedule 26.08.2013
comment
Вероятно, вам следует показать свой код... так как не совсем понятно, какую процедуру вы выполняете на каком вводе.   -  person Thomas    schedule 26.08.2013


Ответы (2)


Вот пример некоторых преобразований, которые можно выполнить с помощью format():

x <- c(35.38, 35.42, 35.4, 9.583, 9.406, 9.494, 260100, 271200, 531300)
format(x, decimal.mark=",", big.mark=".", scientific=FALSE)
# [1] "     35,380" "     35,420" "     35,400" "      9,583" "      9,406"
# [6] "      9,494" "260.100,000" "271.200,000" "531.300,000"

Есть несколько других параметров, таких как trim, justify и т. д., которые могут представлять интерес для подготовки вашего вывода к pandoc.

person A5C1D2H2I1M1N2O1R2T1    schedule 26.08.2013
comment
это то, что я искал. Спасибо! - person beginneR; 26.08.2013
comment
только одно, как я могу удалить три NULL? - person beginneR; 26.08.2013
comment
@beginneR, пожалуйста, найдите время, чтобы прочитать ?format и связанные страницы справки. Вы столкнетесь с широким диапазоном аргументов для управления форматированием вывода, одним из которых является логическое drop0trailing, которое должно делать то, что вы хотите. - person A5C1D2H2I1M1N2O1R2T1; 26.08.2013

Поскольку этот вопрос был действительно вдохновляющим, я недавно представил эту big.mark функцию в моем пакете pander, которая может возвращать отформатированные таблицы уценки из объектов R с предопределенными параметрами — между прочим, опираясь на format. Небольшая демонстрация:

  1. Загрузите пакет (установленный из GH, пока эти функции не попадут в CRAN):

    > library(pander)
    
  2. Создайте демо data.frame:

    > x <- matrix(c(35.38, 35.42, 35.4, 9.583, 9.406, 9.494, 260100, 271200, 531300), 3, byrow = TRUE)
    
  3. Установите параметры по умолчанию: (может потребоваться переключение значений для контекста США)

    > panderOptions('decimal.mark', ',')
    > panderOptions('big.mark', '.')
    
  4. Пусть pander сделает все остальное:

    > pander(x)
    
    ------- ------- -------
     35,38   35,42   35,4  
    
     9,583   9,406   9,494 
    
    260.100 271.200 531.300
    ------- ------- -------
    

Там вы можете найти и использовать еще больше опций (например, синтаксис уценки для таблицы).

person daroczig    schedule 26.08.2013
comment
Очень приятное дополнение к пандеру! +1 - person A5C1D2H2I1M1N2O1R2T1; 12.09.2013
comment
Большое спасибо @AnandaMahto, всегда приятно слышать такие замечательные отзывы :) - person daroczig; 12.09.2013
comment
для контекста США рассмотрите обратные метки: panderOptions('big.mark', ',') - person userJT; 23.09.2015