Memformat data dalam tabel sebagai persentase

Aug 18 2020

Saya memiliki kerangka data yang terlihat seperti ini:

Berikut kode untuk membuat DF ini:

structure(list(ethnicity = structure(c(1L, 2L, 3L, 5L), .Label = c("AS", 
"BL", "HI", "Others", "WH", "Total"), class = "factor"), `Strongly agree` = c(30.7, 
26.2, 37.4, 31.6), Agree = c(43.9, 34.5, 41, 45.4), `Neither agree nor disagree` = c(9.4, 
14.3, 8.6, 8.7), Disagree = c(10, 15.5, 9.9, 9.7), `Strongly disagree` = c(6, 
9.5, 3.2, 4.6)), row.names = c(NA, -4L), class = "data.frame")

Saya ingin menambahkan bilah data dan menjadikan angka-angka ini sebagai persentase. Saya mencoba menggunakan pustaka yang dapat diformat untuk melakukan itu (lihat kode saya di bawah).

formattable(df,align=c("l","l","l","l","l","l"),
        list(`ethnicity` = formatter("span", style = ~ style(color = "grey", font.weight = "bold"))
            ,area(col = 2:6) ~ function(x) percent(x / 100, digits = 0)
            ,area(col = 2:6) ~ color_bar("#DeF7E9")))

Saya menghadapi 2 masalah:

  1. Angka-angka tidak muncul sebagai persentase dalam output tabel.
  2. Penjajaran tampak off di kolom terakhir yaitu

Akan sangat menghargai jika seseorang dapat membantu saya memahami apa yang saya lewatkan di sini?

Jawaban

Paul Aug 18 2020 at 15:12

Ini adalah solusinya tetapi membutuhkan banyak pengetikan, saya kira itu mungkin untuk digunakan mutate_at()tetapi saya tidak dapat menemukan cara memasukkan nama kolom di percent()bagian tersebut. Menggunakan .menghasilkan kesalahan.

Ini berfungsi dengan banyak pengetikan:

library(dplyr)
library(formattable)

df %>% 
  mutate(`Strongly agree` = color_bar("#DeF7E9")(formattable::percent(`Strongly agree`/100))) %>% 
  mutate(`Agree` = color_bar("#DeF7E9")(formattable::percent(`Agree`/100))) %>% 
  mutate(`Disagree` = color_bar("#DeF7E9")(formattable::percent(`Disagree`/100))) %>%
  mutate(`Neither agree nor disagree` = color_bar("#DeF7E9")(formattable::percent(`Neither agree nor disagree`/100))) %>%
  mutate(`Strongly disagree` = color_bar("#DeF7E9")(formattable::percent(`Strongly disagree`/100))) %>%
  formattable(.,
              align=c("l","l","l","l","l","l"),
              `ethnicity` = formatter("span", style = ~ style(color = "grey", font.weight = "bold")))

Ini tidak berfungsi tetapi mungkin ditingkatkan:

df %>% 
  mutate_at(.vars = 2:6, .funs = color_bar("#DeF7E9")(formattable::percent(./100))) %>% 
  formattable(...)

Beberapa informasi lagi tentang struktur "aneh" ini var = color_bar(...)(var)