2017-10-19 52 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被縮放。)

相關問題