2015-12-30 16 views
8

是否有一種簡潔的方式來選擇dplyr中某些類型的列?例如,如何選擇dplyr鏈中的所有字符列?dplyr - 如何選擇特定類型的列

+0

不就是熟悉dplyr包。但你能做這樣的事嗎?類似於'class'函數:'d < - tbl_df(iris); type_sum(d); select(d,which(type_sum(d)==「dbl」))' – Jimbou

回答

21

Dplyr 0.5具有select_if(),讓你寫select_if(is.character)

+2

這使得代碼比在dplyr鏈中使用應用程序更加清潔! –

4

解決這個問題的一種方法是首先獲取不同列的類。因此,假如我們有一些數據:

library(dplyr) 
DT <- data.frame(A = letters[1:6], B = c(T,F,F), C = seq(1,2,length.out = 6), D = 1:6) 
dt <- tbl_df(DT) 
dt$A <- as.character(dt$A) 
輸出
 A  B  C  D 
    (chr) (lgl) (dbl) (int) 
1  a TRUE 1.0  1 
2  b FALSE 1.2  2 
3  c FALSE 1.4  3 
4  d TRUE 1.6  4 
5  e FALSE 1.8  5 
6  f FALSE 2.0  6 

我們現在可以使用函數來獲取類:

cls <- sapply(dt, class) 
cls 
輸出
 A   B   C   D 
"character" "logical" "numeric" "integer" 

現在是直轉發:

newDF <- dt %>% select(which(cls=="character")) 
newDF 
輸出
 A 
    (chr) 
1  a 
2  b 
3  c 
4  d 
5  e 
6  f 
+0

不錯 - 我正在尋找一種可能避免在dplyr鏈之外獲得類的方法。 – paljenczy

12

爲此,您可以用

dt %>% select(which(sapply(.,is.character)))