更改数据框中多因子变量值的大小写

时间:2017-05-28 01:36:15

标签: r dataframe dplyr

我有一个包含整数和因子变量的数据框。我们称之为df。它有变量"a", "b", "c", "d""a" "c"是因素。

由于具体情况,一些因子变量具有被视为彼此唯一的值(例如,alameda和" ALAMEDA")。我的目标是将所有因子变量的所有值更改为小写。我看到以下答案提供了更改一列的解决方案: Lower case for a data frame column。 我尝试修改该答案以使用数据框中的所有因子变量,但无济于事。似乎我的目标可以通过dplyr::mutate_if()并使用is.factortolower(levels())完成,但我不确定这一切是如何结合在一起的。我认为我最接近的尝试是df %>% mutate_if(is.factor, tolower(levels())),但显然这不起作用。如果有办法做到这一点,修改上面链接的答案也没关系!

3 个答案:

答案 0 :(得分:0)

可以高估单线解决方案。为什么不只是制作自己的帮助函数,如果你发现需要它来做更多的事情,你可以进一步自定义它。

dftolower <- function(df){
  for(nm in names(df)){
    if(is.factor(df[,nm])){
      levels(df[,nm]) <- tolower(levels(df[,nm]))
    }else if(is.character(df[,nm])){
      df[,nm] <- tolower(df[,nm])
    }
  }
  return(df)
}

答案 1 :(得分:0)

不是将级别设置为小写,而是可以在as.factor(tolower(as.character(x))的静脉中使用lambda函数:

library(dplyr) 
df %>% mutate_if(
    .predicate = is.factor,
    .funs = function(x) as.factor(tolower(as.character(x)))
)

答案 2 :(得分:0)

在我的问题中,我没有明确表示我希望将变量作为因素保留。根据提供的其他答案,我提出的答案是:

df <- df %>% mutateif(is.factor, tolower(levels(df[])))