
setSpotifyFMCtoFactor <- function(DT, rfmcCols=extract("(front.*cat|^rfmc$)", DT)) {
  if (!is.data.table(DT))
    stop ("setSpotifyFMCtoFactor() is meant to be called on a data.table\nHINT:  use  setSpotifyFMCtoFactor(DT)\n       NOT  DT[, (col) := setSpotifyFMCtoFactor(col)]", call.=FALSE)
  if (!length(rfmcCols)) {
    warning ("No rfmc like column found. Returning data.table unchanged")
    return(DT)
  }
  for (rfmcCol in rfmcCols) {
    levs <- DT[[rfmcCol]] %>% unique
    starts <- c(
        extract("Fr", levs) %>% sort
      , extract("Mi", levs) %>% sort
      , extract("Ca", levs) %>% sort
    )

    ends <- extract("Total", levs)
    rest <- setdiff(levs, c(starts, ends)) %>% sort
    levs <- c(starts, rest, ends)
    DT[, (rfmcCol) := setFactorOrder(get(rfmcCol), ordering=levs)]    
  }
}
