如何将多列data.frame按行转换为指定格式文本字符串(求dplyr方案)
问题
需要将数据框中每行的state字段与转换为百分比格式的freq字段组合,再拼接成单个字符串用于图注。
测试数据:
df <- data.frame (state=c("buy", "sell"), freq=c(0.102, .801))
数据结构:
> df state freq 1 buy 0.102 2 sell 0.801
期望生成的字符串:
mystring <- "buy 10.2%, sell 80.1%"
希望用dplyr/tidyverse的简洁实现,避免循环。
解决方案
可以结合dplyr的行处理和stringr的字符串拼接功能完成,以下是两种简洁实现方式:
方式一:使用str_glue拼接行内容
library(tidyverse) mystring <- df %>% mutate(label = str_glue("{state} {scales::percent(freq, accuracy = 0.1)}")) %>% pull(label) %>% str_c(collapse = ", ")
方式二:使用paste拼接行内容
library(tidyverse) mystring <- df %>% mutate(label = paste(state, scales::percent(freq, accuracy = 0.1), sep = " ")) %>% pull(label) %>% str_c(collapse = ", ")
关键说明
scales::percent(freq, accuracy = 0.1):将小数格式的freq转为带一位小数的百分比字符串,无需手动计算乘以100再格式化。pull(label):把数据框中生成的单行拼接结果提取为字符串向量。str_c(collapse = ", "):将向量中的所有字符串用,连接成最终的单个字符串。
内容的提问来源于stack exchange,提问作者micstr
相关产品推荐
相关产品推荐

