2015-09-29 20 views
10

मैं एसपीएसएस + एक्सेल के बजाय, मेरे सभी डेटा क्रंचिंग को रमार्कडाउन में स्थानांतरित करने की कोशिश कर रहा हूं, लेकिन यह पता नहीं लगा सकता कि एक संलग्न ग्राफ के साथ तालिका कैसे बनाएं।एक तालिका में स्पार्कलाइन ग्राफ जोड़ें

Ideal table

Excel में इस स्पार्कलाइन साथ किया जा सकता सुविधा या, के रूप में मैं यह कर, बस एक ग्राफ बनाने और यह बहुत सही ढंग से रखा जाता है।

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

library(tables) 
library(pander) 
pander(#convert table to rmarkdown table 
    tabular( 
    (Species + 1) ~ (n=1) + Format(digits=2) * 
     (Sepal.Length + Sepal.Width) * (mean + sd), 
    data = iris), 
    caption = "Table 1. Iris") #Heading for table 

क्या किसी ने ऐसा कुछ बनाया है? शायद gridExtra पैकेज के साथ एक समाधान, हालांकि मुझे संदेह है कि पैकेज तालिका और ग्राफ के साथ मिलकर मिल सकता है।


संपादित करें - मेरा समाधान अब तक।
एचटीएमएल समाप्त हो गया है। पीडीएफ के साथ आधा रास्ता। डॉक्टर के लिए, मुझे नहीं लगता कि यह संभव है (एक्सेल में पेस्ट कॉपी करें)।

HTML तालिका
सबसे पहले, तो आर जानता अगर मैं एक एचटीएमएल, पीडीएफ या दस्तावेज़ प्रतिपादन कर रहा हूँ। out_type मान लेता है: "html", "pdf" और "docx"। अगर मैं बयान में इस वस्तु का उपयोग कर सकता हूं।

out_type <- knitr::opts_knit$get("rmarkdown.pandoc.to") 

अब सलाखों:

if(out_type == "html"){ #if output is html then: 
     my_table$Mean_Sepal_Length <- paste0(#I have a table saved as a dataframe. I add a column to it called Mean_Sepal_Length 
"<span style=' width: 100%; display: flex;'><span style='display: inline-block; border-radius: 3px; padding-right: 0; background-color: #00457C; width:", #create the bar 
     MEAN_SEPAL_L_OBJECT, #set the with of the bar. I have an object with these proportions 
"%; margin-right: 5px;'>&nbsp;</span><span>", MEAN_SEPAL_L_VARIABLE, "%</span></span>") #finally add the value behind the bar. 
    } 

Looks like this

यह भी संभव है दो कॉलम है।

Another possibility

यहाँ फिर से मैं अनुपात के साथ एक मेज है, मैं दो वस्तुओं पुरुषों और महिलाओं के अनुपात में है कि नहीं है।

my_table$male_female <- paste0(
"<span style=' width: 100%; display: flex;'><span>", MALE_BAR, #the proportion of males 
"%</span><span style='display: inline-block;border-top-left-radius: 3px; border-bottom-left-radius:3px; padding: 0; background-color: #00457C; width:", MALE_BAR, #width of the bar for males 
"%; margin-left: 5px;'></span><span style='display: inline-block; border-top-right-radius: 3px; border-bottom-right-radius:3px; padding:0; background-color: #AC1A2F; width:", 
FEMALE_BAR, #width of bar for females 
"%;margin-right: 5px;'></span><span>", FEMALE_BAR, #proportion of females 
"%</span></span>") 

बेशक, यदि आप चाहें तो सलाखों के अंदर संख्या भी हो सकती है, लेकिन बार में छोटे होने पर यह एक समस्या है।

पीडीएफ
मुझे पीडीएफ के साथ अब तक नहीं मिला है। यहाँ मेरी समाधान अब तक है:

\begin{tabular}{>{$\rhd$ }lrl} 
Loop at line 151 in divergence & \mybar{3.420}\\ 
Loop at line 1071 in radiation & \mybar{3.270}\\ 
scalar face value    & \mybar{3.090}\\ 
Loop at line 102 in get   & \mybar{1.700}\\ 
get sensible enthalpy   & \mybar{1.250}\\ 
\end{tabular} 

PDF bars

यह रूप में अच्छा नहीं लगता है। मैं लेटेक्स के लिए बहुत नया हूँ। मुझे अभी भी पता लगाने की जरूरत है कि बार के पीछे संख्या कैसे रखें। और इसे मेरे फ़ंक्शन में एक कथन में कैसे रखा जाए। यदि एचटीएमएल तो: यदि पीडीएफ तो ...

मुझे उम्मीद है कि यह किसी की मदद करेगा। लेकिन कृपया, इस धागे में वर्णित संकुल पर विचार करें। वे उत्कृष्ट हैं, मेरा समाधान उन पर आधारित है। मैं बस पैकेज के साथ जो खोज रहा था उसे ठीक नहीं कर सका इसलिए मैंने इसे मैन्युअल रूप से किया।

+2

https://github.com/htmlwidgets/sparkline – zx8754

+0

एक बहुत ही शांत पैकेज/विजेट है कि देखें। तालिका को चित्रित किए बिना, इसे रैमार्कडाउन में किसी तालिका में जोड़ने के बारे में कैसे जाना होगा: पृष्ठ पर जैसा टेक्स्ट दिखाया गया है। उदाहरण के लिए यह काम नहीं करता: 'बढ़ावा देना ( ddply (आईरिस," प्रजाति ", सार, और एन = लंबाई (Sepal.Length), मीन = मतलब (Sepal.Length, na.rm = टी), एसडी = एसडी (सेपाल। लम्बाई, na.rm = टी), स्पार्क = स्पार्कलाइन (मीन)) ) ' –

उत्तर

6

मुझे लगता है कि आपको क्या चाहिए formattable package है।प्रारूपण के साथ स्पार्कलाइन मिश्रण के example भी है, लेकिन मैं इसे आपकी आवश्यकताओं के अनुरूप नहीं कर सका।

--- 
title: http://stackoverflow.com/q/32841221/680068 
--- 

```{r cars} 

library(dplyr) 
library(formattable) 

res <- 
    iris %>% 
    group_by(Species) %>% 
    summarise(N=n(), 
      SL_Mean=round(mean(Sepal.Length),3), 
      SL_SD=round(sd(Sepal.Length),3), 
      SW_Mean=round(mean(Sepal.Width),3), 
      SW_SD=round(sd(Sepal.Width),3)) 

#using formattable 
formattable(res, 
      list(
       SL_Mean=color_bar("pink", 0.5))) 


``` 

enter image description here

+2

मुझे बताएं कि क्या आपको स्वरूपण के साथ कोई अतिरिक्त सहायता चाहिए। – timelyportfolio

+0

@timelyportfolio क्या आप स्पार्कलाइन के साथ एक उदाहरण उत्तर जोड़ सकते हैं? 3 स्पार्कलाइनों को 'सेप्लस लम्बाई 'के लिए' प्रजाति समूह 'प्रति रेखा चार्ट दिखाना चाहिए। – zx8754

7

बस पिछले जवाब देने के लिए एक स्पार्कलाइन उदाहरण जोड़ने। आशा करता हूँ की ये काम करेगा।

--- 
title: http://stackoverflow.com/q/32841221/680068 
--- 

```{r results="asis"} 

library(dplyr) 
library(formattable) 
library(sparkline) 


res <- 
    iris %>% 
    group_by(Species) %>% 
    summarise(N=n(), 
      SL_Mean=round(mean(Sepal.Length),3), 
      SL_SD=round(sd(Sepal.Length),3), 
      SW_Mean=round(mean(Sepal.Width),3), 
      SW_SD=round(sd(Sepal.Width),3)) %>% 
    mutate(sparkline = as.character(Species)) 

#using formattable 
formattable(
    res, 
    list(
    SL_Mean=color_bar("pink", proportion), 
    "sparkline"=function(z){ 
     sapply(
     z, 
     function(zz){ 
      knitr::knit(
      text = sprintf(
       '`r sparkline(c(%s))`', 
       paste0(
       iris[which(iris$Species == zz),"Sepal.Length"], 
       collapse="," 
      ) 
      ), 
      quiet = TRUE 
     ) 
     } 
    ) 
    } 
) 
) 


``` 

इसके अलावा, मैंने सोचा था कि एक गैर उदाहरण कुछ लोगों को खुश कर सकता है।

library(dplyr) 
library(formattable) 
library(sparkline) 


res <- 
    iris %>% 
    group_by(Species) %>% 
    summarise(N=n(), 
      SL_Mean=round(mean(Sepal.Length),3), 
      SL_SD=round(sd(Sepal.Length),3), 
      SW_Mean=round(mean(Sepal.Width),3), 
      SW_SD=round(sd(Sepal.Width),3)) %>% 
    mutate("sparkline" = as.character(Species)) 

#using formattable 
ft <- formattable(
    res, 
    list(
    SL_Mean=color_bar("pink", proportion), 
    "sparkline"=function(z){ 
     sapply(
     z, 
     function(zz){ 
      sprintf(
      '<span class="sparkline-bar">%s</span>', 
      paste0(
       iris[which(iris$Species == zz),"Sepal.Length"], 
       collapse="," 
      ) 
     ) 
     } 
    ) 
    } 
) 
) 

library(htmlwidgets) 
browsable(
    attachDependencies(
    tagList(
     onRender(
     as.htmlwidget(ft), 
     "function(el,x){$('.sparkline-bar').sparkline('html',{type:'bar'});}" 
    ) 

    ), 
    htmlwidgets:::widget_dependencies("sparkline","sparkline") 
) 
) 
+0

_tables_ पैकेज से टैब्यूलर फ़ंक्शन के साथ _formattable_ का उपयोग करना संभव है? मैं एक बड़ी घोंसला वाली टेबल बनाने की कोशिश कर रहा हूं। अर्थात। मैं छोटा सा उदाहरण प्रदान करता हूं। क्या मैं उस तालिका में स्वरूपण के साथ एक बार जोड़ सकता हूं? –

+0

अभी यह टिप्पणी देख रहा है। क्या आप अब भी रुचि रखते हैं? मैंने स्वरूपण योग्य और लगभग हर टेबल पैकेज के साथ प्रयोग किए हैं जो मुझे आर – timelyportfolio

+0

में मिल सकता है कोई समस्या नहीं, मुझे वापस आने के लिए धन्यवाद। नहीं, मैं वास्तव में टेबल पैकेज का उपयोग नहीं कर रहा हूं, इसलिए मुझे यह हल हो गया। बीटीडब्ल्यू आपकी मदद के लिए धन्यवाद; मेरा समाधान मस्जिटी आपके पैकेज के आधार पर था। –

1

वहाँ आप स्पार्कलाइन वस्तुओं बनाने और उन्हें अपने markdown वस्तु को जोड़ सकते हैं, एक पैकेज sparkTable बुलाया भी है। ऑब्जेक्ट्स ggplot ऑब्जेक्ट्स की तरह हैं जो मुझे लगता है कि आप rmarkdown में देख सकते हैं। लेकिन आप वस्तुओं को पीडीएफ, एड, या पीएनजी के रूप में भी सहेज सकते हैं।

एक स्पार्कटेबल ऑब्जेक्ट भी है जो आपके जैसे मुद्रित तालिका को मुद्रित करता है।

कागज (P28) से:

‘‘‘{r, echo=TRUE} 
require(sparkTable) 
sl <- newSparkLine (values = rnorm (25) , lineWidth = .18, pointWidth = .4, 
width = .4, height = .08) 
export(sl , outputType = "png", filename = "sparkLine ") 
‘‘‘ 
This is a sparkline included in the ![ firstSparkLine ](sparkLine.png) 
text ... 
+2

हाल ही में [आर जर्नल] में उनके पेपर (पी 28) (https://journal.r-project.org/archive/2015-1/templ-kowarik-meindl.pdf) knitr के बारे में कुछ विस्तार में जाता है: –

+0

धन्यवाद, यह एक अच्छा पैकेज है। मैं इसे आज़मा दूंगा और देख सकता हूं कि मैं जो कुछ ढूंढ रहा हूं उसे प्राप्त कर सकता हूं। –

संबंधित मुद्दे