[R-es] Sumar positivos y negativos por separado
Proyecto R-UCA
r-uc@ @end|ng |rom uc@@e@
Lun Ene 2 22:17:20 CET 2023
Hola,
He usado el data.frame Chile, pero puedes usar cualquier otro.
De las sumas se han omitido los NA, de lo contrario la suma siempre saldría NA. Además para las columnas no numéricas el resultado es NA.
library(carData)
data(Chile)
sump <- function(x) {
if (is.numeric(x)) {
sum(x[x > 0], na.rm = TRUE) }
else {
NA
}
}
sumn <- function(x) {
if (is.numeric(x)) {
sum(x[x < 0], na.rm = TRUE)
} else {
NA
}
}
sapply(Chile, FUN = sump)
sapply(Chile, FUN = sumn)
> sapply(Chile, FUN = sump)
region population sex age education income
NA 4.110000e+08 NA 1.040430e+05 NA 8.814500e+07
statusquo vote
1.203598e+03 NA
> sapply(Chile, FUN = sumn)
region population sex age education income statusquo
NA 0.000 NA 0.000 NA 0.000 -1203.598
vote
NA
Si no te importa que salga un aviso entonces las definiciones de sumn y sump se pueden simplificar como sigue:
sump <- function(x) {
sum(x[x > 0], na.rm = TRUE) }
}
sumn <- function(x) {
sum(x[x < 0], na.rm = TRUE)
}
Un saludo.
El lun, 02-01-2023 a las 11:23 +0100, Manuel Mendoza escribió:
> 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 using 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 using 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 using 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 using 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 using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
Más información sobre la lista de distribución R-help-es