aplicando cálculo sobre linhas de um dataframe

Olá. Postei essa pergunta ontem mas não obtive resposta. Desculpe por estar postando novamente. 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

Vitor, A forma mais simples que posso oferecer, sem conhecer a sua estrutura de dados, é essa: soma = as.vector(rep(0,dim(x)[1])) for(i in 1:dim(x)[1]){ for(j in c(seq(1,dim(x)[2]-1,2))){ soma = soma + ifelse(is.na(x[i,j]) | is.na(x[i,(j+1)]), 0, ifelse(x[i,j]==x[i,(j+1)], 1, 0)) } } Onde “x” é a matriz de dados originais S From: Vitor Aguiar Sent: Friday, May 18, 2012 2:30 PM To: r-br@listas.c3sl.ufpr.br Subject: [R-br] aplicando cálculo sobre linhas de um dataframe Olá. Postei essa pergunta ontem mas não obtive resposta. Desculpe por estar postando novamente. 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 -------------------------------------------------------------------------------- _______________________________________________ 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, não sei se vai funcionar... mas não custa tentar... :) Supondo que seu data frame se chame "df" mas calc <- function(x){ x1 <- x[seq(1, length(x)-1, 2)] x2 <- x[seq(2, length(x) , 2)] sum(x1-x2 == 0, na.rm=TRUE) } apply(df, 1, calc) Em 18 de maio de 2012 15:28, Sandro Sperandei <ssperandei@hotmail.com>escreveu:
Vitor,
A forma mais simples que posso oferecer, sem conhecer a sua estrutura de dados, é essa:
soma = as.vector(rep(0,dim(x)[1]))
for(i in 1:dim(x)[1]){ for(j in c(seq(1,dim(x)[2]-1,2))){
soma = soma + ifelse(is.na(x[i,j]) | is.na(x[i,(j+1)]), 0, ifelse(x[i,j]==x[i,(j+1)], 1, 0)) } }
Onde “x” é a matriz de dados originais
S
*From:* Vitor Aguiar <vitor.aguiar@me.com> *Sent:* Friday, May 18, 2012 2:30 PM *To:* r-br@listas.c3sl.ufpr.br *Subject:* [R-br] aplicando cálculo sobre linhas de um dataframe
Olá. Postei essa pergunta ontem mas não obtive resposta. Desculpe por estar postando novamente.
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
------------------------------ _______________________________________________ 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.
-- Marcos F. Silva http://sites.google.com/site/marcosfs2006

Obrigado a todos! Eu tentei a solução do Sandro, mas meu computador fica computando por vários minutos e o cálculo não termina. A ideia do Marcos deu certo! Muito bom, obrigado mesmo! Vitor On May 18, 2012, at 12:34 PM, Marcos Silva wrote:
Vitor, não sei se vai funcionar... mas não custa tentar... :)
Supondo que seu data frame se chame "df" mas
calc <- function(x){ x1 <- x[seq(1, length(x)-1, 2)] x2 <- x[seq(2, length(x) , 2)] sum(x1-x2 == 0, na.rm=TRUE) } apply(df, 1, calc)
Em 18 de maio de 2012 15:28, Sandro Sperandei <ssperandei@hotmail.com> escreveu: Vitor,
A forma mais simples que posso oferecer, sem conhecer a sua estrutura de dados, é essa:
soma = as.vector(rep(0,dim(x)[1]))
for(i in 1:dim(x)[1]){ for(j in c(seq(1,dim(x)[2]-1,2))){
soma = soma + ifelse(is.na(x[i,j]) | is.na(x[i,(j+1)]), 0, ifelse(x[i,j]==x[i,(j+1)], 1, 0)) } }
Onde “x” é a matriz de dados originais
S
From: Vitor Aguiar Sent: Friday, May 18, 2012 2:30 PM To: r-br@listas.c3sl.ufpr.br Subject: [R-br] aplicando cálculo sobre linhas de um dataframe
Olá. Postei essa pergunta ontem mas não obtive resposta. Desculpe por estar postando novamente.
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
_______________________________________________ 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.
-- Marcos F. Silva http://sites.google.com/site/marcosfs2006 _______________________________________________ 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)
-
Marcos Silva
-
Sandro Sperandei
-
Vitor Aguiar