【发布时间】:2017-05-29 06:30:19
【问题描述】:
我有一个包含整数和因子变量的数据框。我们称之为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())),但显然这不起作用。如果有办法做到这一点,修改上面链接的答案也很好!
【问题讨论】:
-
感谢您到目前为止的回答!我一直在尝试并简化为
df %>% mutate_if(is.factor, tolower)。这会在控制台中以小写形式返回所有因子变量值,但实际上似乎并没有改变df。 -
好吧,
df永远不会改变,除非您重新签名更改。你需要写df <- df %>% mutate_if(is.factor, tolower) -
啊,我现在明白了。事后看来,我发现我不了解管道操作员,但我查了一下,它更有意义。我仍然遇到的一个问题是
tolower()将因子变量转换为字符变量。将levels()嵌套在tolower()中就可以解决这个问题。我的最终代码是df <- df %>% mutateif(is.factor, tolower(levels(df[])))。无论出于何种原因,因子变量之一不会变为小写,但该变量值的大写不会引入任何无根据的唯一值。谢谢斯拉法!