使用R中的模板字符串将因子转换为字符串

使用R中的模板字符串将因子转换为字符串,r,R,如果我有一个数据框,其值如下 d = data.frame(value = runif(1000, 10,50)) 使用cut d$class = cut(d$value, 4) 如何将因子对象快速转换为表示范围的字符串?例如: (10,20] -> "10 to 20" 我试着做一个函数,但我想知道是否有更快的方法 style.factor <- function(factors, template="%s to %s") { parts = str_split(str_

如果我有一个数据框,其值如下

d = data.frame(value = runif(1000, 10,50))
使用
cut

d$class = cut(d$value, 4)
如何将
因子
对象快速转换为表示范围的字符串?例如:

(10,20] -> "10 to 20"
我试着做一个函数,但我想知道是否有更快的方法

style.factor <- function(factors, template="%s to %s") {
  parts = str_split(str_sub(factors, 2, -2), ",", simplify=TRUE)
  return(sprintf(template, parts[,1], parts[,2]))
}

使用与您类似的方法,但具有
级别
功能

 # extract levels
 levels_c <- levels(d$class)

 # form and assign new levels
 library(stringr)
 parts = str_split(str_sub(levels_c , 2, -2), ",", simplify=TRUE)
 template="%s to %s"
 levels(d$class) <- sprintf(template, parts[,1], parts[,2])

 # check the outcome
 levels(d$class)
 # [1] "10 to 20" "20 to 30" "30 to 40" "40 to 50"
#提取级别

级别\u c您可以使用
sub
相对快速地执行此操作:

gsub(“^\\(.+?),(.+?)\\]$”,“\\1到\\2”,d$类)

这实际上是一种更好的方法,因为它在绘制图形时保留了组的数字顺序(例如,“9到11”不会出现在“11到13”之前)。这可以“快速”完成,仅适用于小数据集。对于大数据集,最好直接修改因子级别。
 # extract levels
 levels_c <- levels(d$class)

 # form and assign new levels
 library(stringr)
 parts = str_split(str_sub(levels_c , 2, -2), ",", simplify=TRUE)
 template="%s to %s"
 levels(d$class) <- sprintf(template, parts[,1], parts[,2])

 # check the outcome
 levels(d$class)
 # [1] "10 to 20" "20 to 30" "30 to 40" "40 to 50"
d$class <- as.character(d$class)