Eu tenho um dataframe e uma lista de colunas nesse dataframe que gostaria de descartar. Vamos usar o iris
conjunto de dados como exemplo. Eu gostaria de deixar cair Sepal.Length
e Sepal.Width
e utilizar apenas as colunas restantes. Como faço isso usando select
ou select_
do dplyr
pacote?
Aqui está o que tentei até agora:
drop.cols <- c('Sepal.Length', 'Sepal.Width')
iris %>% select(-drop.cols)
Erro em -drop.cols: argumento inválido para operador unário
iris %>% select_(.dots = -drop.cols)
Erro em -drop.cols: argumento inválido para operador unário
iris %>% select(!drop.cols)
Erro em! Drop.cols: tipo de argumento inválido
iris %>% select_(.dots = !drop.cols)
Erro em! Drop.cols: tipo de argumento inválido
Sinto que estou perdendo algo óbvio, porque parece uma operação muito útil que já deveria existir. No Github, alguém postou um problema semelhante , e Hadley disse para usar 'indexação negativa'. Isso é o que (eu acho) eu tentei, mas sem sucesso. Alguma sugestão?
iris
, mas não no meu dataframe real (iris
foi um exemplo de brinquedo). Meu dataframe contém 4558 linhas e 147 colunas. A mensagem de erro que recebi foiError in eval(x$expr, data, x$env) : variable names are limited to 10000 bytes
. Alguma ideia de por que isso pode estar acontecendo?select_vars
vez deselect
. Agora funciona perfeitamente!one_of
? A menos que esteja faltando alguma coisa, ela não aparece na documentação do pacote (help(package='dplyr')
).help(one_of, package = "dplyr")
. Pelo menos está na versão do pacote 0.5.0. Mas ajuda ler os blogs que Hadley posta quando há atualizações em um de seus pacotes. E algumas funções são documentadas dentro de outras funções. Infelizmente, isso exige a leitura de toda a documentação, o que eu faço principalmente quando quero algo que não é imediatamente óbvio ou possível com a função.tente também
fonte
Além
select(-one_of(drop.cols))
disso, há algumas outras opções para descartar colunasselect()
que não envolvem a definição de todos os nomes de coluna específicos (usando os dados de amostra do dplyr starwars para mais variedade de nomes de coluna):fonte
select_if(~!is.list(.))
equivalente aselect_if(is.list(.))
?~
é uma abreviatura de purrr para definir uma função anônima, não é outro símbolo para não. Por exemplo, esses dois significam a mesma coisafunction(x) {!is.list(x)}
e~!is.list(.)
. pense~
em uma abreviação defunction(.)
.Tenha cuidado com a
select()
função, porque ela é usada nos pacotes dplyr e MASS, então se o MASS estiver carregado, select () pode não funcionar corretamente. Para descobrir quais pacotes estão carregados, digitesessionInfo()
e procure por ele na seção "outros pacotes anexados:". Se estiver carregado, digitedetach( "package:MASS", unload = TRUE )
e suaselect()
função deverá funcionar novamente.fonte
dplyr::select()
.dselect <- dplyr::select()
.Nós podemos tentar
fonte
dplyr
capacidade do hype em torno de tornar as tarefas de análise básicas fáceis de ler e escrever, estou desapontado que a solução real parece uma solução alternativa.one_of
outra solução é o caminho a percorrer. Eu esqueci sobre isto.Outra maneira é transformar as colunas indesejadas em
NULL
, isso evita os parênteses incorporados:fonte
Se você tiver um caractere especial nos nomes das colunas, um
select
ou outroselect_
pode não funcionar conforme o esperado. Esta propriedadedplyr
de usar"."
. Para referir-se ao conjunto de dados na pergunta, a seguinte linha pode ser usada para resolver este problema:fonte
Podes tentar
fonte