如何在R的flextable中为tibble文本列的数字单独设色?
在flextable中为混合字符串里的数字单独设置颜色
当然可以用flextable实现这个需求,核心是通过compose()函数拆分单元格内的文字与数字部分,分别指定样式。以下是完整实现代码:
library(tibble) library(flextable) library(stringr) Score = c(85.5, 92.3, 78.9) # 定义对应每个数字的颜色 num_colors <- c("red", "green", "purple") my_tibble = tibble( Name = c("Alice which is", "Bob is ", "Charlie aged"), Age = c(25, 30, 22), text = c(paste("has",Score[1]) , paste("and were",Score[2]), paste("scores",Score[3])) ) my_tibble %>% flextable() %>% # 为第三列(text)设置混合样式 compose( j = "text", value = as_paragraph( # 提取纯文字部分,保持黑色 str_remove(text, "\\d+\\.\\d+"), # 提取数字部分,应用对应颜色 color( str_extract(text, "\\d+\\.\\d+"), color = num_colors ) ) ) %>% # 保留原有的背景设置 bg(i = 1:nrow(my_tibble), j = 1:ncol(my_tibble), bg = "#EFEFEF", part = "body")
关键说明:
str_extract(text, "\\d+\\.\\d+"):通过正则表达式提取单元格中的浮点数(如果是整数可调整正则为\\d+)str_remove(text, "\\d+\\.\\d+"):移除数字部分,保留纯文字内容color()函数:为提取出的数字指定对应颜色,num_colors向量的顺序要和Score的顺序严格对应compose()+as_paragraph():将不同样式的内容组合回同一个单元格
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

