【问题标题】:mutate_if and mutate_at functionality in one linemutate_if 和 mutate_at 功能在一行中
【发布时间】:2019-11-16 14:02:52
【问题描述】:

是否可以 (1) 使用选择助手和 (2) 检查列类型来应用函数?

例如,这不起作用 - 我想将所有名称不包含“VAL”的整数列转换为因子:

dane_usa_nr%>% 
  mutate_at(vars(!contains("VAL")) & is.integer , as.factor)

是否可以在 dplyr 中使用其他语法?

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    试试这个。它会改变所有不包含“VAL”的列。然后它会检查它是否是整数。如果是,它将使用as.factor()。如果不是,它只会返回该列。

    dane_usa_nr%>% 
      mutate_at(vars(!contains("VAL")), function(x) if (is.integer(x)) as.factor(x) else x)
    

    【讨论】:

      【解决方案2】:

      不完全是dplyr 的方法,但您可以创建一个满足所需条件的逻辑向量。

      inds <- (!grepl("VAL", names(dane_usa_nr))) & (sapply(dane_usa_nr, is.integer))
      

      然后在mutate_if中使用这个向量

      library(dplyr)
      dane_usa_nr %>%  mutate_if(inds, as.factor)
      

      lapply

      dane_usa_nr[inds] <- lapply(dane_usa_nr[inds], as.factor)
      

      我们也可以获取索引并在mutate_at中使用

      inds <- intersect(grep("VAL", names(dane_usa_nr), invert = TRUE), 
                        which(sapply(dane_usa_nr, is.integer)))
      
      dane_usa_nr %>% mutate_at(inds, as.factor)
      

      在这种情况下,基本 R 实现保持不变。

      【讨论】:

        猜你喜欢
        • 2020-06-23
        • 2019-09-24
        • 1970-01-01
        • 2020-03-07
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多