प्रतिशत के रूप में तालिका में डेटा स्वरूपित करना

Aug 18 2020

मेरे पास एक डेटाफ्रेम है जो इस तरह दिखता है:

यहाँ इस DF बनाने के लिए कोड है:

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")

मैं डेटा बार जोड़ना चाहता हूं और ये संख्या प्रतिशत के रूप में बनाता है। मैंने ऐसा करने के लिए फॉर्मेटेबल लाइब्रेरी का उपयोग करने की कोशिश की (नीचे मेरा कोड देखें)।

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")))

मैं 2 समस्याओं का सामना कर रहा हूँ:

  1. अंक तालिका के आउटपुट में प्रतिशत के रूप में प्रकट नहीं होते हैं।
  2. संरेखण पिछले कॉलम में बंद लगता है यानी

वास्तव में सराहना करेंगे कि क्या कोई मुझे यह समझने में मदद कर सकता है कि मैं यहां क्या याद कर रहा हूं?

जवाब

Paul Aug 18 2020 at 15:12

यहां एक समाधान है, लेकिन इसके लिए बहुत अधिक टाइपिंग की आवश्यकता है, मुझे लगता है कि इसका उपयोग करना संभव है mutate_at()लेकिन मैं अभी यह नहीं जान पाया कि percent()भाग में कॉलम नाम कैसे पारित करें । .एक त्रुटि का उपयोग करना ।

यह बहुत सारे टाइपिंग के साथ काम करता है:

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")))

यह काम नहीं करता है लेकिन इसमें सुधार किया जा सकता है:

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

इस "अजीब" संरचना के बारे में कुछ और जानकारी var = color_bar(...)(var)