R - ReporteRs包。是否可以将条件格式应用于文本?

时间:2016-03-17 15:52:45

标签: r formatting powerpoint flextable reporters

我关注dataframe

> View(AuthorsMM)

    Autor    #  Sentiment
1   Autor 1  33 J
2   Autor 2  33 J
3   Autor 3  22 K
4   Autor 4  18 L
5   Autor 5  16 L
6   Autor 6  15 K
7   Autor 7  15 L
8   Autor 8  15 K
9   Autor 9  15 K
10  Autor 10 14 K

我正在使用包ReporteRs将此data.frame作为flextable发送到Powerpoint:

AuthorsMM_ft <- FlexTable( data = head(AuthorsMM,10), header.columns = TRUE )

我使用followig文本属性定义情绪列:

AuthorsMM_ft[, 3] = textProperties( color = 'white', font.weight = 'bold', font.family = 'Wingdings', font.size = 12 )

使Powerpoint根据列的内容显示不同的表情符号(因为Wingdings为trueType)。

但是,我想根据内容不同地在文本中应用不同的颜色(绿色,黄色,红色)。因此:

  • if(Sentiment ==&#34; J&#34;)then textProperties( color =&#39; green&#39; , font.weight =&#39; bold&#39;,font.family =&#39; Wingdings&#39;,font.size = 12)

  • if(Sentiment ==&#34; K&#34;)then textProperties( color =&#39; yellow&#39; , font.weight =&#39; bold&#39;,font.family =&#39; Wingdings&#39;,font.size = 12)

  • if(Sentiment ==&#34; L&#34;)then textProperties( color =&#39; red&#39; , font.weight =&#39; bold&#39;,font.family =&#39; Wingdings&#39;,font.size = 12)

使用这个包可以吗?

1 个答案:

答案 0 :(得分:3)

是的,这是可能的。

此代码显示了如何执行此操作:

library(ReporteRs)

# define the data frame - extracted with dput()
AuthorsMM <- structure(list(Autor = c("Autor 1", "Autor 2", "Autor 3", "Autor 4", 
                                      "Autor 5", "Autor 6", "Autor 7", "Autor 8", "Autor 9", "Autor 10"
), `#` = c(33L, 33L, 22L, 18L, 16L, 15L, 15L, 15L, 15L, 14L), 
Sentiment = c("J", "J", "K", "L", "L", "K", "L", "K", "K", 
              "K")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
                                                                             -10L), .Names = c("Autor", "#", "Sentiment"), spec = structure(list(
                                                                               cols = structure(list(Autor = structure(list(), class = c("collector_character", 
                                                                                                                                         "collector")), `#` = structure(list(), class = c("collector_integer", 
                                                                                                                                                                                          "collector")), Sentiment = structure(list(), class = c("collector_character", 
                                                                                                                                                                                                                                                 "collector"))), .Names = c("Autor", "#", "Sentiment")), default = structure(list(), class = c("collector_guess", 
                                                                                                                                                                                                                                                                                                                                               "collector"))), .Names = c("cols", "default"), class = "col_spec"))

# conditional formatting:
base_text_prop = textProperties(font.size = 12, 
                            color = "black",
                            font.weight = 'bold',
                            font.family = 'Wingdings')

myCellProps = cellProperties(padding = 5)

AuthorsMM_ft <- FlexTable(data = head(AuthorsMM,10), 
                      header.columns = TRUE,
                      body.text.props = base_text_prop)

AuthorsMM_ft[AuthorsMM$Sentiment == 'J',3] = chprop(base_text_prop, color = 'green')
AuthorsMM_ft[AuthorsMM$Sentiment == 'K',3] = chprop(base_text_prop, color = 'yellow')
AuthorsMM_ft[AuthorsMM$Sentiment == 'L',3] = chprop(base_text_prop, color = 'red')
AuthorsMM_ft

enter image description here

由于某些原因,在textProperties内定义FlexTable并不起作用。当我使用background.color时,它似乎改变了格式。

FlexTables中changing propertiesconditional formatting的更多示例。