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