[R-es] Sumar positivos y negativos por separado

Emilio L. Cano em||opezc@no @end|ng |rom gm@||@com
Lun Ene 2 09:02:16 CET 2023


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://stat.ethz.ch/mailman/listinfo/r-help-es


	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es