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 <mmend...@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@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@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@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a