Excluindo linhas de uma tabela no R

Mais uma dica rápida que saiu enquanto eu fazia minha tese…

Estava preparando uma base de dados no R, quando vi que precisava excluir as linhas que tivesse o campo referente ao mês com valor igual a 1 ou igual a 5. Sempre fiz isso no SAS com um if bem simples, mas não lembrava no R, talvez já tenha feito aqui, mas quem lê o blog sabe que não é lá tão organizado. Enfim, a lógica no R é tão simples quanto a do SAS, mas não tão intuitiva (ao menos para mim). Veja o antes e depois de uma tabela chamada dados retirando as linhas nas quais o campo s seja igual a 1 ou 5 e quais os códigos utilizar em algumas linguagens que já mencionamos aqui (é tão simples que vou colocar tudo junto mesmo):

excluir-linhas

No R com um indexador lógico (! indicando negação):

dados[(dados$mes!=5 & dados$mes!=1),];

No R com subset:

subset(dados, mes != 1 & mes != 5)

Da forma que escrevemos acima, você vai obter uma nova tabela, mas ela não está sendo salva com nome algum. Se você quiser, pode facilmente criar uma nova:

tabela_nova = subset(dados, mes!=1 & mes !=5)

No SAS com data step:

data dados_v2;
    set dados;
    if mes ne 1 and mes ne 5; *ou if mes <> 1;
run;

No SAS com proc sql:

proc sql;
    create table dados_v2 as
    select * from
    dados where mes <> 1 and mes <> 5; 
run;

No SQL:

select * from dados where mes <> 1 and mes <> 5;
Anúncios

9 comentários

      1. Opa, valeu. E caso eu quisesse mais de um tipo de observação ficasse, como faria?

        Tentei com:
        tabela_nova = tabela_antiga[(tabela_antiga$mes == 5, 6),]
        Mas não funcionou…

        Curtir

  1. Então, Yukio. Acredito que o subset será o melhor método mesmo então…

    Porque dessa última forma “tabela_nova = tabela_antiga[(tabela_antiga$mes = 5 & tabela_antiga$mes = 6),]”, ele dá um erro… Mas mesmo assim, agradeço a ajuda!! Att.

    Curtir

      1. Então, aqui na realidade ele funciona, mas não cria um banco novo com as observações certas.

        Ele cria com elas aleatórias… No exemplo seu, estariam todos os meses 1, 2, 3… no banco de dados, mesmo eu selecionando apenas o 2 e 3.

        Assim da erro: tabela_nova = tabela_antiga[(tabela_antiga$mes = 5 & tabela_antiga$mes = 6),]

        Assim fica da forma que mencionei: tabela_nova = tabela_antiga[(tabela_antiga$mes!=5 & tabela_antiga$mes!=6),]

        Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s