pergunta simples - aplicar função para rows de um dataframe

Boa tarde a todos, tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha. Exemplo de linha no dataframe: 1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA Então pensei em fazer algo como: funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) } Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso? Desde já, muito obrigado. Vitor

Vitor, Algo como pode funcionar: apply(dados, 1, function(x) length(is.na(x)) / ncol(dados) * Código não testado! att, FH 2012/5/16 Vitor Aguiar <vitor.aguiar@me.com>:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha.
Exemplo de linha no dataframe:
1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) }
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso?
Desde já, muito obrigado. Vitor
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Olá FH, esse código gera o valor "1" para todas as minhas linhas. Isso ocorre porque o length(is.na(x)) é igual a ncol(dados), mas isso só seria verdade se todos os meus dados fossem NA, e não são. Eu tentei algo como table(is.na(pop[1, ]))[[2]]. Isso conta quantos são NA e quantos não são (FALSE e TRUE), e então eu extraio o segundo valor, que representa a quantidade de NAs (NA = TRUE). Depois eu divido isso pelo ncol pra ter a proporção. Mas não consigo aplicar isso pra todas as linhas. Vitor On May 16, 2012, at 3:03 PM, FHRB Toledo wrote:
Vitor,
Algo como pode funcionar:
apply(dados, 1, function(x) length(is.na(x)) / ncol(dados)
* Código não testado!
att, FH
2012/5/16 Vitor Aguiar <vitor.aguiar@me.com>:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha.
Exemplo de linha no dataframe:
1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) }
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso?
Desde já, muito obrigado. Vitor
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
Vitor Rezende da Costa Aguiar --------------------------------------------------- PhD candidate in biotechnology Rede Nordeste de Biotecnologia UFES, Brazil --------------------------------------------------- Current Adress: Department of Integrative Biology University of California, Berkeley 2033 Valley Life Sciences Building #4134 Berkeley, CA 94720 Phone: 1 (510) 473-2070

Corrigindo... apply(dados, 1, length(which(is.na(x))) / ncol(dados)) Obrigado! att, FH 2012/5/16 Vitor Aguiar <vitor.aguiar@me.com>:
Olá FH,
esse código gera o valor "1" para todas as minhas linhas. Isso ocorre porque o length(is.na(x)) é igual a ncol(dados), mas isso só seria verdade se todos os meus dados fossem NA, e não são.
Eu tentei algo como table(is.na(pop[1, ]))[[2]]. Isso conta quantos são NA e quantos não são (FALSE e TRUE), e então eu extraio o segundo valor, que representa a quantidade de NAs (NA = TRUE). Depois eu divido isso pelo ncol pra ter a proporção. Mas não consigo aplicar isso pra todas as linhas.
Vitor
On May 16, 2012, at 3:03 PM, FHRB Toledo wrote:
Vitor,
Algo como pode funcionar:
apply(dados, 1, function(x) length(is.na(x)) / ncol(dados)
* Código não testado!
att, FH
2012/5/16 Vitor Aguiar <vitor.aguiar@me.com>:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o
proporção de NAs que tenho em cada linha em relação ao total de dados para
essa linha.
Exemplo de linha no dataframe:
1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) {
naind = table(is.na( x[i, ]))
naind[[2]] / length(x[i, ])
}
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não
consigo aplicar a função acima com a função apply, pois ela não reconhece o
"i". Tenho que usar um loop pra isso?
Desde já, muito obrigado.
Vitor
_______________________________________________
R-br mailing list
R-br@listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código
mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
Vitor Rezende da Costa Aguiar --------------------------------------------------- PhD candidate in biotechnology Rede Nordeste de Biotecnologia UFES, Brazil --------------------------------------------------- Current Adress: Department of Integrative Biology University of California, Berkeley 2033 Valley Life Sciences Building #4134 Berkeley, CA 94720 Phone: 1 (510) 473-2070
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

rowMeans(is.na(object)) Onde object eh o seu data.frame. On May 16, 2012 10:55 PM, "Vitor Aguiar" <vitor.aguiar@me.com> wrote:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha.
Exemplo de linha no dataframe:
*1* NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) }
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso?
Desde já, muito obrigado. Vitor
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Benilton... muito mais elegante! 2012/5/16 Benilton Carvalho <beniltoncarvalho@gmail.com>:
rowMeans(is.na(object))
Onde object eh o seu data.frame.
On May 16, 2012 10:55 PM, "Vitor Aguiar" <vitor.aguiar@me.com> wrote:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha.
Exemplo de linha no dataframe:
1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) }
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso?
Desde já, muito obrigado. Vitor
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Nossa, muito obrigado mais uma vez! Esse do Benílton funciona perfeitamente! On May 16, 2012, at 3:19 PM, FHRB Toledo wrote:
Benilton... muito mais elegante!
2012/5/16 Benilton Carvalho <beniltoncarvalho@gmail.com>:
rowMeans(is.na(object))
Onde object eh o seu data.frame.
On May 16, 2012 10:55 PM, "Vitor Aguiar" <vitor.aguiar@me.com> wrote:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha.
Exemplo de linha no dataframe:
1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) }
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso?
Desde já, muito obrigado. Vitor
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
Vitor Rezende da Costa Aguiar --------------------------------------------------- PhD candidate in biotechnology Rede Nordeste de Biotecnologia UFES, Brazil --------------------------------------------------- Current Adress: Department of Integrative Biology University of California, Berkeley 2033 Valley Life Sciences Building #4134 Berkeley, CA 94720 Phone: 1 (510) 473-2070

Senhores, tenho um outra dúvida similar para o mesmo conjunto de dados. Relembrando, tenho um dataframe com milhares de linhas com valores NAs e não-NAs. Suponhamos a seguinte linha: 1. NA NA NA NA NA NA 6 6 NA NA 8 11 NA NA 17 18 NA NA 10 10 11 13 8 9 11 11 11 11 Vamos considerar os dados em pares. Assim, meu primeiro par é NA NA, o quarto par é 6 6. Há alguma forma de eu contar quantos pares iguais eu tenho em cada linha do dataframe? Assim, nessa linha por exemplo eu teria o resultado 4, pois tenho 4 pares de valores iguais (6 6, 10 10, 11 11, 11 11). Então preciso aplicar o cálculo para todas as linhas. O caminho seria um loop onde eu contaria dados[i, 1] == dados[i, 2]? Obrigado, Vitor On May 16, 2012, at 3:24 PM, Vitor Aguiar wrote:
Nossa, muito obrigado mais uma vez!
Esse do Benílton funciona perfeitamente!
On May 16, 2012, at 3:19 PM, FHRB Toledo wrote:
Benilton... muito mais elegante!
2012/5/16 Benilton Carvalho <beniltoncarvalho@gmail.com>:
rowMeans(is.na(object))
Onde object eh o seu data.frame.
On May 16, 2012 10:55 PM, "Vitor Aguiar" <vitor.aguiar@me.com> wrote:
Boa tarde a todos,
tenho um dataframe composto de milhares de linhas e queria calcular o proporção de NAs que tenho em cada linha em relação ao total de dados para essa linha.
Exemplo de linha no dataframe:
1 NA NA 15 16 23 22 NA NA NA NA 4 10 18 19 14 21 NA NA 11 8 6 11 NA NA
Então pensei em fazer algo como:
funçãoNA = function( x ) { naind = table(is.na( x[i, ])) naind[[2]] / length(x[i, ]) }
Sou novo em programação e não sei como aplicar isso pra todas as linhas. Não consigo aplicar a função acima com a função apply, pois ela não reconhece o "i". Tenho que usar um loop pra isso?
Desde já, muito obrigado. Vitor
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
Vitor Rezende da Costa Aguiar --------------------------------------------------- PhD candidate in biotechnology Rede Nordeste de Biotecnologia UFES, Brazil --------------------------------------------------- Current Adress: Department of Integrative Biology University of California, Berkeley 2033 Valley Life Sciences Building #4134 Berkeley, CA 94720 Phone: 1 (510) 473-2070
participantes (3)
-
Benilton Carvalho
-
FHRB Toledo
-
Vitor Aguiar