2017-10-19 140 views
1

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

是否有一个聪明的解决方案来处理逐列,而不需要解决每一个列名与 蜕变?

我想是这样的:提前

回答

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(ends_with("...")=scale(ends_with("..."),featureX,featureZ) 

(深知这不工作)

非常感谢。如果你想保持这些列那不是数字取代transmute_ifmodify_if。 (可能有更明智的方法来排除列y被缩放。)

相关问题