【问题标题】:R: Scale a subset of multiple columns (with similar names) with dplyrR:使用 dplyr 缩放多个列(具有相似名称)的子集
【发布时间】:2017-10-19 06:59:26
【问题描述】:

我最近从 R 中的常见数据框操作转移到了 tidyverse。但是我遇到了关于使用scale()function 缩放列的问题。 我的数据由列组成,其中一些是数字特征,一些是分类特征。最后一列也是数据的 y 值。所以我想缩放所有数字列,但不是最后一列。 使用select()function,我可以编写很短的代码行,并选择添加ends_with("...") 参数时需要缩放的所有数字列。但我不能真正利用它来缩放。在那里我必须使用transmute(feature1=scale(feature1),feature2=scale(feature2)...)并单独命名每个功能。这工作正常,但会使代码膨胀。 所以我的问题是:

是否有一种智能的解决方案来逐列操作,而无需使用 转化?

我想像这样:

transmute(ends_with("...")=scale(ends_with("..."),featureX,featureZ)

(很清楚这是行不通的)

在此先感谢

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:
    library(tidyverse)
    data("economics") 
    
    # add variables that are not numeric
    economics[7:9] <- sample(LETTERS[1:10], size = dim(economics)[1], replace = TRUE)
    
    # add a 'y' column (for illustration)
    set.seed(1)
    economics$y <- rnorm(n = dim(economics)[1])
    
    economics_modified <- economics %>%
                           select(-y) %>%
                           transmute_if(is.numeric, scale) %>% 
                           add_column(y = economics$y)
    

    如果您想保留那些不是数字的列,请将transmute_if 替换为modify_if。 (可能有一种更聪明的方法来排除列 y 的缩放。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      相关资源
      最近更新 更多