Buenas, Sin usar dplyr, Se puede hacer un bucle en las columnas y para cada columna sum(x[x>0]) sum(x[x < 0]) Un saludo. El lun, 02-01-2023 a las 09:02 +0100, Emilio L. Cano escribió:> Hola, > > Este sería un ejemplo reproducible rápido. A mí para esto me gusta rowise() de {dplyr}. En c_across() se pueden seleccionar las columnas a > conveniencia. Seguramente haya una forma de evitar crear las funciones. Si la suma la quieres en valor absoluto multiplicas por -1 en > suma_neg y listo. > > Un saludo, > Emilio > > > > set.seed(2023) > > d <- data.frame(a = round(rnorm(10), 1), > + b = round(rnorm(10), 1), > + c = round(rnorm(10), 1)) > > d > a b c > 1 -0.1 0.3 -0.4 > 2 -1.0 -0.4 -0.3 > 3 -1.9 0.6 1.2 > 4 -0.2 0.7 0.2 > 5 -0.6 -0.6 -0.4 > 6 1.1 0.7 -1.8 > 7 -0.9 0.6 -0.6 > 8 1.0 0.5 -0.9 > 9 -0.4 0.9 1.5 > 10 -0.5 0.6 2.7 > > > > library(dplyr) > > > > suma_pos <- function(x){ > + sum((x>0)*x) > + } > > suma_neg <- function(x){ > + sum((x<0)*x) > + } > > > > d |> > + rowwise() |> > + mutate(positivos = suma_pos(c_across()), > + negativos = suma_neg(c_across())) > # A tibble: 10 × 5 > # Rowwise: > a b c positivos negativos > <dbl> <dbl> <dbl> <dbl> <dbl> > 1 -0.1 0.3 -0.4 0.3 -0.5 > 2 -1 -0.4 -0.3 0 -1.7 > 3 -1.9 0.6 1.2 1.8 -1.9 > 4 -0.2 0.7 0.2 0.9 -0.2 > 5 -0.6 -0.6 -0.4 0 -1.6 > 6 1.1 0.7 -1.8 1.8 -1.8 > 7 -0.9 0.6 -0.6 0.6 -1.5 > 8 1 0.5 -0.9 1.5 -0.9 > 9 -0.4 0.9 1.5 2.4 -0.4 > 10 -0.5 0.6 2.7 3.3 -0.5 > > > > > El 2 ene 2023, a las 6:31, Manuel Mendoza <mmendoza en fulbrightmail.org> escribió: > > > > Buenos días, de un conjunto de variables, quiero obtener la suma de los > > valores positivos de cada fila, por una parte, y la de los negativos por > > otra. Qué variables toman valores positivos y negativos varía de una fila a > > otra, claro. > > Gracias por vuestra ayuda, > > Manuel > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XPbjkJgKEEP5dmap64bNfzfAmIe4ArK_nN4H9-QIBPAihE4aO-RS6q6YAaM3IT-sP9qA0PqeGoqQF7gIlec$ > > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XPbjkJgKEEP5dmap64bNfzfAmIe4ArK_nN4H9-QIBPAihE4aO-RS6q6YAaM3IT-sP9qA0PqeGoqQF7gIlec$ >
Gracias Emilio y Proyecto R-UCA, no consigo implementar ninguna de vuestras propuestas. En la de Emilio sale bien hasta las funciones, incluidas, pero no entiendo a partir de: d |> y me da error. Respecto a sum(x[x>0]), lamento deciros que tampoco lo entiendo ni consigo implementarlo ¿Podríais darme más detalles? Gracias, Manuel El lun, 2 ene 2023 a las 10:23, Proyecto R-UCA (<r-uca en uca.es>) escribió:> Buenas, > > Sin usar dplyr, > > Se puede hacer un bucle en las columnas y para cada columna > > sum(x[x>0]) > > sum(x[x < 0]) > > Un saludo. > > El lun, 02-01-2023 a las 09:02 +0100, Emilio L. Cano escribió: > > Hola, > > > > Este sería un ejemplo reproducible rápido. A mí para esto me gusta > rowise() de {dplyr}. En c_across() se pueden seleccionar las columnas a > > conveniencia. Seguramente haya una forma de evitar crear las funciones. > Si la suma la quieres en valor absoluto multiplicas por -1 en > > suma_neg y listo. > > > > Un saludo, > > Emilio > > > > > > > set.seed(2023) > > > d <- data.frame(a = round(rnorm(10), 1), > > + b = round(rnorm(10), 1), > > + c = round(rnorm(10), 1)) > > > d > > a b c > > 1 -0.1 0.3 -0.4 > > 2 -1.0 -0.4 -0.3 > > 3 -1.9 0.6 1.2 > > 4 -0.2 0.7 0.2 > > 5 -0.6 -0.6 -0.4 > > 6 1.1 0.7 -1.8 > > 7 -0.9 0.6 -0.6 > > 8 1.0 0.5 -0.9 > > 9 -0.4 0.9 1.5 > > 10 -0.5 0.6 2.7 > > > > > > library(dplyr) > > > > > > suma_pos <- function(x){ > > + sum((x>0)*x) > > + } > > > suma_neg <- function(x){ > > + sum((x<0)*x) > > + } > > > > > > d |> > > + rowwise() |> > > + mutate(positivos = suma_pos(c_across()), > > + negativos = suma_neg(c_across())) > > # A tibble: 10 × 5 > > # Rowwise: > > a b c positivos negativos > > <dbl> <dbl> <dbl> <dbl> <dbl> > > 1 -0.1 0.3 -0.4 0.3 -0.5 > > 2 -1 -0.4 -0.3 0 -1.7 > > 3 -1.9 0.6 1.2 1.8 -1.9 > > 4 -0.2 0.7 0.2 0.9 -0.2 > > 5 -0.6 -0.6 -0.4 0 -1.6 > > 6 1.1 0.7 -1.8 1.8 -1.8 > > 7 -0.9 0.6 -0.6 0.6 -1.5 > > 8 1 0.5 -0.9 1.5 -0.9 > > 9 -0.4 0.9 1.5 2.4 -0.4 > > 10 -0.5 0.6 2.7 3.3 -0.5 > > > > > > > > > El 2 ene 2023, a las 6:31, Manuel Mendoza <mmendoza en fulbrightmail.org> > escribió: > > > > > > Buenos días, de un conjunto de variables, quiero obtener la suma de los > > > valores positivos de cada fila, por una parte, y la de los negativos > por > > > otra. Qué variables toman valores positivos y negativos varía de una > fila a > > > otra, claro. > > > Gracias por vuestra ayuda, > > > Manuel > > > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es en r-project.org > > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XPbjkJgKEEP5dmap64bNfzfAmIe4ArK_nN4H9-QIBPAihE4aO-RS6q6YAaM3IT-sP9qA0PqeGoqQF7gIlec$ > > > > > > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XPbjkJgKEEP5dmap64bNfzfAmIe4ArK_nN4H9-QIBPAihE4aO-RS6q6YAaM3IT-sP9qA0PqeGoqQF7gIlec$ > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Bueno, funcionó con: pos<-c(0) for (i in 1:nrow(data)) { x<-data[i,] pos[i]<-sum(x[x>0]) } y x<0 para los negativos Gracias nuevamente, Manuel El lun, 2 ene 2023 a las 10:23, Proyecto R-UCA (<r-uca en uca.es>) escribió:> Buenas, > > Sin usar dplyr, > > Se puede hacer un bucle en las columnas y para cada columna > > sum(x[x>0]) > > sum(x[x < 0]) > > Un saludo. > > El lun, 02-01-2023 a las 09:02 +0100, Emilio L. Cano escribió: > > Hola, > > > > Este sería un ejemplo reproducible rápido. A mí para esto me gusta > rowise() de {dplyr}. En c_across() se pueden seleccionar las columnas a > > conveniencia. Seguramente haya una forma de evitar crear las funciones. > Si la suma la quieres en valor absoluto multiplicas por -1 en > > suma_neg y listo. > > > > Un saludo, > > Emilio > > > > > > > set.seed(2023) > > > d <- data.frame(a = round(rnorm(10), 1), > > + b = round(rnorm(10), 1), > > + c = round(rnorm(10), 1)) > > > d > > a b c > > 1 -0.1 0.3 -0.4 > > 2 -1.0 -0.4 -0.3 > > 3 -1.9 0.6 1.2 > > 4 -0.2 0.7 0.2 > > 5 -0.6 -0.6 -0.4 > > 6 1.1 0.7 -1.8 > > 7 -0.9 0.6 -0.6 > > 8 1.0 0.5 -0.9 > > 9 -0.4 0.9 1.5 > > 10 -0.5 0.6 2.7 > > > > > > library(dplyr) > > > > > > suma_pos <- function(x){ > > + sum((x>0)*x) > > + } > > > suma_neg <- function(x){ > > + sum((x<0)*x) > > + } > > > > > > d |> > > + rowwise() |> > > + mutate(positivos = suma_pos(c_across()), > > + negativos = suma_neg(c_across())) > > # A tibble: 10 × 5 > > # Rowwise: > > a b c positivos negativos > > <dbl> <dbl> <dbl> <dbl> <dbl> > > 1 -0.1 0.3 -0.4 0.3 -0.5 > > 2 -1 -0.4 -0.3 0 -1.7 > > 3 -1.9 0.6 1.2 1.8 -1.9 > > 4 -0.2 0.7 0.2 0.9 -0.2 > > 5 -0.6 -0.6 -0.4 0 -1.6 > > 6 1.1 0.7 -1.8 1.8 -1.8 > > 7 -0.9 0.6 -0.6 0.6 -1.5 > > 8 1 0.5 -0.9 1.5 -0.9 > > 9 -0.4 0.9 1.5 2.4 -0.4 > > 10 -0.5 0.6 2.7 3.3 -0.5 > > > > > > > > > El 2 ene 2023, a las 6:31, Manuel Mendoza <mmendoza en fulbrightmail.org> > escribió: > > > > > > Buenos días, de un conjunto de variables, quiero obtener la suma de los > > > valores positivos de cada fila, por una parte, y la de los negativos > por > > > otra. Qué variables toman valores positivos y negativos varía de una > fila a > > > otra, claro. > > > Gracias por vuestra ayuda, > > > Manuel > > > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es en r-project.org > > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XPbjkJgKEEP5dmap64bNfzfAmIe4ArK_nN4H9-QIBPAihE4aO-RS6q6YAaM3IT-sP9qA0PqeGoqQF7gIlec$ > > > > > > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XPbjkJgKEEP5dmap64bNfzfAmIe4ArK_nN4H9-QIBPAihE4aO-RS6q6YAaM3IT-sP9qA0PqeGoqQF7gIlec$ > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]