Eu tenho um quadro de dados R com 6 colunas e quero criar um novo quadro de dados que tenha apenas três das colunas.
Supondo que o meu quadro de dados é df
, e eu quero colunas extrato A
, B
e E
, este é o único comando que eu possa descobrir:
data.frame(df$A,df$B,df$E)
Existe uma maneira mais compacta de fazer isso?
df1 %>% select(A, B, E) %>% rowMeans(.)
. Consulte a documentação do%>%
?magrittr::`%>%`
Você pode definir um subconjunto usando um vetor de nomes de colunas. Eu prefiro fortemente essa abordagem sobre aquelas que tratam nomes de colunas como se fossem nomes de objetos (por exemplo
subset()
), especialmente quando programando em funções, pacotes ou aplicativos.fonte
object of type 'closure' is not subsettable
.df
.df
também é uma função no pacote de estatísticas.-"A"
é um erro de sintaxe. E?Extract
diz, " , também pode ser inteiros negativos, indicando elementos / fatias de deixar de fora da seleção."i
j
...
> df[,c("A")]
[1] 1
. O usosubset
não tem essa desvantagem.Este é o papel da
subset()
função:fonte
c("A", "B")
é um vetor, não uma lista.Existem duas opções óbvias: a de Joshua Ulrich
df[,c("A","B","E")]
oucomo em
fonte
Por alguma razão apenas
trabalhou para mim. Todas as sintaxes acima produziram "colunas indefinidas selecionadas".
fonte
Onde df1 é seu quadro de dados original:
fonte
dplyr
. Ele usabase::subset
e é idêntico à resposta de Stephane Laurent, exceto que você usa números de coluna em vez de nomes de colunas.Você também pode usar o
sqldf
pacote que executa seleções nos quadros de dados R como:Isso fornece como saída um quadro de dados
df1
com colunas: A, B, E.fonte
Você pode usar
with
:fonte
Além disso, você pode atribuir um nome diferente aos dados recém-criados
fonte
[
e subconjunto não são substituíveis:[
retorna um vetor se apenas uma coluna estiver selecionada.fonte
drop=FALSE
. Exemplo:df[,c("a"),drop=F]