R:使用dplyr

时间:2017-10-19 06:59:26

标签: r dplyr tidyverse

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

  

是否存在逐列操作的智能解决方案,而无需使用每个列名称   蜕变?

我想象的是:

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

(知道这不起作用)

非常感谢提前

1 个答案:

答案 0 :(得分:2)

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的缩放。)