Le mie risposte sarebbero:
- no ("Si può selezionare in
dplyr
essere utilizzato con un vettore logica?")
prove: (1) il vostro esempio, (2) la pagina di aiuto:
. ..: elenco separato da virgole di espressioni non quotate. È possibile trattare i nomi delle variabili come se fossero posizioni. Utilizzare i valori positivi per selezionare le variabili; utilizzare valori negativi per eliminare le variabili.
Non dice nulla sui vettori logici. Scusate.
- Non so ("perché non è logico?") - "solo perché" (non credo che nessuno, a parte lo sviluppatore, possa davvero rispondere a questa domanda). Si potrebbe mettere in una richiesta di funzionalità ...
E 'un po' goffo, ma
select_(dat,.dots=names(isNum)[isNum])
opere (notare che è necessario la variante select_
per consentire l'utilizzo di un vettore di carattere). Ma il buon vecchio stile
subset(dat,select=isNum)
sembra funzionare bene anche (a meno che non riesce a giocare bene con dplyr
in qualche altro modo che non ho pensato).
Se si guarda il codice di dplyr:::starts_with
, si può vedere che restituisce un vettore di posizioni, non è un vettore logica
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)
}
Stavo per suggerire che si tenta di modificare questa funzione per creare un is_numeric
equivalente, ma non capisco abbastanza bene la magia sottostante ...
fonte
2014-11-11 21:53:17
Forse un [argomento di 'dplyr 0.3.1'] (https://github.com/hadley/dplyr/issues/497): "In generale, qual è il modo migliore per filtrare le colonne per alcune condizioni booleane in' dplyr'? " – Henrik
Penso che dovresti postare 'select (dat, which (isNum))' come risposta (e anche accettarlo se sembra la soluzione migliore) –