Câu trả lời của tôi sẽ là:
- không ("Có thể chọn trong
dplyr
được sử dụng với một vector logic?")
bằng chứng: (1) ví dụ của bạn, (2) các trang trợ giúp:
. ..: Danh sách các biểu thức không được trích dẫn bằng dấu phẩy được phân cách bằng dấu phẩy. Bạn có thể xử lý các tên biến số giống như chúng là các vị trí. Sử dụng các giá trị dương để chọn biến; sử dụng giá trị âm để thả biến.
Không nói gì về vectơ hợp lý. Lấy làm tiếc.
- Tôi không biết ("tại sao không logic?") Bạn có thể đặt trong một yêu cầu tính năng ...
Đó là một chút phiền phức, nhưng
select_(dat,.dots=names(isNum)[isNum])
công trình (lưu ý rằng bạn cần có biến thể select_
cho phép sử dụng một vector ký tự). Tuy nhiên, các kiểu máy ảnh cũ
subset(dat,select=isNum)
có vẻ hoạt động tốt (trừ khi không chơi độc đáo với dplyr
theo cách khác mà tôi chưa từng nghĩ đến).
Nếu bạn nhìn vào mã của dplyr:::starts_with
, bạn có thể thấy rằng nó trả về một vector của các vị trí, không phải là một vector logic
function (vars, match, ignore.case = TRUE)
{
stopifnot(is.string(match), !is.na(match), nchar(match) >
0)
if (ignore.case)
match <- tolower(match)
n <- nchar(match)
if (ignore.case)
vars <- tolower(vars)
which(substr(vars, 1, n) == match)
}
tôi sẽ đề nghị bạn nên cố gắng sửa đổi chức năng này để tạo ra một is_numeric
tương đương, nhưng tôi không hiểu phép thuật cơ bản đủ tốt ...
Nguồn
2014-11-11 21:53:17
Có thể là một chủ đề cho 'dplyr 0.3.1'] (https://github.com/hadley/dplyr/issues/497): "Nói chung, cách tốt nhất để lọc cột bằng một số điều kiện boolean trong' dplyr' là gì? " – Henrik
Tôi nghĩ bạn nên đăng 'chọn (dat, which (isNum))' làm câu trả lời (và thậm chí chấp nhận nó nếu nó có vẻ là giải pháp tốt nhất) –