【问题标题】:How to specify function arguments within mutate_at如何在 mutate_at 中指定函数参数
【发布时间】:2022-01-08 12:29:14
【问题描述】:

我想在指定因子标签的同时将 data.frame 的多列从字符类转换为因子类。

首先,我将创建一个虚拟 data.frame,代码应该在其上以便其他人可以重现该问题,如下所示:

df <- data.frame(replicate(2,sample(0:1,20,rep=TRUE)),
                 replicate(2,sample(0:2,20,rep=TRUE)))
names(df) <- c("xxx_var1", "xxx_var2", "yyy_var1", "yyy_var2")

我已设法将所需的列转换如下:

df <- df %>%
   mutate_at(vars(starts_with("xxx")), factor)

现在我想在 factor() 函数中指定参数,但我不知道如何。如果我尝试以下操作:

df <- df %>%
   mutate_at(vars(starts_with("xxx")), factor(labels = c("no", "yes"))

它返回以下错误:

因素中的错误(标签 = c(“否”,“是”)): 无效的“标签”;长度 2 应该是 1 或 0

是否可以使用 mutate_at 一次为所有这些列指定因子标签?

【问题讨论】:

  • 您熟悉purrr 包中的map 函数吗?此外,您能否提供您用来使问题在我们的机器上重现的数据样本?您可以使用 dput(head(df)) 并从控制台复制结果。
  • 这将有助于在df 中以纯文本形式查看具有代表性的数据样本例如来自dput(df) 的输出。
  • df %&gt;% mutate_at(vars(starts_with("xxx")), factor, labels = c("no", "yes"))?
  • library(dplyr); df %&gt;% mutate(across(starts_with("xxx"), ~factor(., levels = c("no", "yes"))))
  • @jdobres 您的解决方案有效,非常感谢!非常干净和简单。如果您可以发布您的想法作为答案,我可以接受它作为正确的解决方案。

标签: r dplyr tidyverse


【解决方案1】:

factor 的“标签”参数作为命名参数提供给mutate_at

df %>% 
  mutate_at(vars(starts_with("xxx")), factor, labels = c("no", "yes"))

但是,mutate_xxx 函数已被 mutate 和新的 across 函数的使用所取代。正如 Jon Spring 评论的那样,以下是等价的:

df %>% 
  mutate(across(starts_with("xxx"), ~factor(., levels = c("no", "yes"))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-12
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多