【问题标题】:R - Scaling numeric values only in a dataframe with mixed typesR - 仅在具有混合类型的数据框中缩放数值
【发布时间】:2014-05-12 21:30:24
【问题描述】:

我正在使用具有混合数据类型(数字和字符)并且还有一个字符键作为主要标识符的数据框。我想对数值变量进行缩放和居中。我试过使用 scale() 函数,但它要求所有字段都是数字。当我只取数字字段并对其进行缩放时,我必须删除字符标识符才能对其进行缩放。

我理想的最终状态是我有一个包含字符字段和缩放数字字段的数据框。

我知道这是一个新手问题,所以请保持温和;-)

谢谢!

吉姆

【问题讨论】:

    标签: r


    【解决方案1】:

    这样的事情应该做你想做的事:

    library(MASS)
    ind <- sapply(anorexia, is.numeric)
    anorexia[ind] <- lapply(anorexia[ind], scale)
    

    【讨论】:

    • 谢谢!那会缩放和居中(标准化)吗?
    • @Jim 是的,它就是这么做的。看?scale
    【解决方案2】:

    这可以直接使用dplyr::mutate_if

    library(dplyr)
    
    iris %>%
        mutate_if(is.numeric, scale)
    

    【讨论】:

      【解决方案3】:

      下面这段代码不需要任何外部库:

      # Scale all numeric columns in a data frame.
      # df is your data frame
      
      performScaling <- TRUE  # Turn it on/off for experimentation.
      
      if (performScaling) {
      
          # Loop over each column.
          for (colName in names(df)) {
      
              # Check if the column contains numeric data.
              if(class(df[,colName]) == 'integer' | class(df[,colName]) == 'numeric') {
      
                  # Scale this column (scale() function applies z-scaling).
                  df[,colName] <- scale(df[,colName])
              }
          }
      }
      

      【讨论】:

      • 另一个也没有,library(MASS) 正在提供示例数据集。
      猜你喜欢
      • 2022-11-24
      • 2018-11-14
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多