Как увеличить расстояние между столбцами при красивой печати фрейма данных? - PullRequest
0 голосов
/ 01 декабря 2018

Допустим, у меня есть фрейм данных, подобный приведенному ниже.

x <- read.table(text="
  gross  net.ss      net     rate  gross.m     net.m
  12000 11141.4 10369.25 6.434592 1000.000  864.1041
  12500 11641.4 10761.75 7.037208 1041.667  896.8124
  13000 12141.4 11154.25 7.593469 1083.333  929.5208
  13500 12636.0 11542.51 8.099926 1125.000  961.8758
  14000 13104.0 11909.89 8.529357 1166.667  992.4908
  14500 13572.0 12277.27 8.929172 1208.333 1023.1058
", header = TRUE)

format довольно неплохо выполняет печать фрейма данных, но я обнаружил, что один пробел между столбцаминедостаточно.Это затрудняет чтение таблицы IMO.

> format(x, digits = 2, nsmall = 2, big.mark = ",")
   gross    net.ss       net rate  gross.m    net.m
1 12,000 11,141.40 10,369.25 6.43 1,000.00   864.10
2 12,500 11,641.40 10,761.75 7.04 1,041.67   896.81
3 13,000 12,141.40 11,154.25 7.59 1,083.33   929.52
4 13,500 12,636.00 11,542.51 8.10 1,125.00   961.88
5 14,000 13,104.00 11,909.89 8.53 1,166.67   992.49
6 14,500 13,572.00 12,277.27 8.93 1,208.33 1,023.11

В идеале мне бы хотелось два пробела между столбцами.Я не могу найти вариант, который делает это.С опцией width вы можете указать минимальную ширину, но это делает все столбцы одинаковой шириной, что еще хуже

> format(x, digits = 2, nsmall = 2, big.mark = ",", width = 9)
       gross     net.ss        net      rate    gross.m      net.m
1     12,000  11,141.40  10,369.25      6.43   1,000.00     864.10
2     12,500  11,641.40  10,761.75      7.04   1,041.67     896.81
3     13,000  12,141.40  11,154.25      7.59   1,083.33     929.52
4     13,500  12,636.00  11,542.51      8.10   1,125.00     961.88
5     14,000  13,104.00  11,909.89      8.53   1,166.67     992.49
6     14,500  13,572.00  12,277.27      8.93   1,208.33   1,023.11

Есть идеи?

1 Ответ

0 голосов
/ 01 декабря 2018

Может быть с пользовательской функцией?

spaces <- function(x, space = 2){
  s <- rep(" ", space)
  as.data.frame(sapply(x, function(y) paste0(s, y)))
}

spaces(x)
spaces(format(x, digits = 2, nsmall = 2, big.mark = ","), 2)
...