Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert factor to a string using a template string in R

Tags:

r

If I have a dataframe with values like

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

and the values are classified into groups using cut

d$class = cut(d$value, 4)

how can quickly convert the factor objects to strings representing the range? For example:

(10,20] -> "10 to 20"

I tried making a function, but I'm wondering if there's a faster way.

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]))
}
> style.factor(d$class)
  "40 to 50" "20 to 30" "30 to 40" ...
like image 437
rovyko Avatar asked Dec 06 '25 05:12

rovyko


2 Answers

You can use sub to do this relatively quickly:

gsub("^\\((.+?),(.+?)\\]$", "\\1 to \\2", d$class)
like image 147
Brigadeiro Avatar answered Dec 08 '25 18:12

Brigadeiro


Using an approach similar to yours but with the levels function.

 # 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"

Naturally, if you wish to convert to characters

d$class <- as.character(d$class)  
like image 33
Suren Avatar answered Dec 08 '25 18:12

Suren



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!