【问题标题】:R loops with factor creation具有因子创建的 R 循环
【发布时间】:2019-11-22 05:28:40
【问题描述】:

我想检查我的变量中的唯一性是否少于 4 个,这是真的,我想从中创建一个因子。

我创建了一个函数:

 checker <- function(x) {
  if (is.numeric(x) == TRUE) {

   if (length(unique(x)) < 5) {
       x <- factor(x)
   }

} else {
  break
}
  return(x)
}

但它仍然返回数字向量。

我想,出于某种原因

x <- factor(x)

当我尝试时不起作用:

checker <- function(x) {
    x <- factor(x)
    return(x)
}

循环返回数值

【问题讨论】:

    标签: r loops for-loop if-statement


    【解决方案1】:

    你可以试试这个功能

    checker <- function(x) {
       if (is.numeric(x) & length(unique(x)) < 5)
          factor(x)
       else x
    }
    

    然后使用lapply应用它

    df[] <- lapply(df, checker)
    str(df)
    #'data.frame':  6 obs. of  2 variables:
    # $ a: Factor w/ 4 levels "1","2","3","4": 1 2 3 3 4 3
    # $ b: int  1 2 3 4 5 6
    

    或者正如@akrun 建议的那样,dplyr 的选项是

    library(dplyr)
    df %>% mutate_if(~ is.numeric(.) && n_distinct(.) < 5, factor)
    

    数据

    df <- data.frame(a = c(1, 2, 3, 3, 4, 3), b = 1:6)
    

    【讨论】:

    • 或带有dplyr df %&gt;% mutate_if(~ is.numeric(.) &amp;&amp; n_distinct(.) &lt; 5, factor)的选项
    【解决方案2】:

    试试下面的功能:

    checker <- function(x) ifelse(length(unique(x))< 5, return(factor(x)), return(x))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多