2015-12-30 21 views
8

Có cách nào ngắn gọn để chọn các cột thuộc loại nhất định trong dplyr không? Ví dụ, làm thế nào để chọn tất cả các cột ký tự trong một chuỗi dplyr?dplyr - cách chọn các cột thuộc loại nhất định

+0

Không phải là quen thuộc với các gói dplyr. Nhưng bạn có thể làm một cái gì đó như thế này? Tương tự như hàm 'class':' d <- tbl_df (iris); type_sum (d); chọn (d, cái nào (loại_sum (d) == "dbl")) ' – Jimbou

Trả lời

21

Dplyr 0,5 có select_if() cho phép bạn viết select_if(is.character)

+2

Điều này làm cho mã sạch hơn nhiều so với sử dụng một áp dụng bên trong chuỗi dplyr! –

4

Một cách để đi về nó trước hết là lấy các lớp của các cột khác nhau. Vì vậy, giả sử chúng ta có một số dữ liệu:

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) 
đầu ra
 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 

Bây giờ chúng ta có thể có được các lớp học sử dụng chức năng:

cls <- sapply(dt, class) 
cls 
đầu ra
 A   B   C   D 
"character" "logical" "numeric" "integer" 

Bây giờ nó là thẳng chuyển tiếp:

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

Đẹp - Tôi đang tìm một cách để có thể tránh nhận các lớp bên ngoài chuỗi dplyr. – paljenczy

12

Bạn có thể làm điều này với

dt %>% select(which(sapply(.,is.character))) 
Các vấn đề liên quan