[R-es] Sumar positivos y negativos por separado

Emilio L. Cano em||opezc@no @end|ng |rom gm@||@com
Lun Ene 2 11:47:34 CET 2023


Tendrías que ser más específico con lo del error para poderte ayudar.

Para entender mi ejemplo tendrías que estar familiarizado con el pipe ( |> nativo que yo uso, o %>% que es equivalente) y con el “tidyverse”. Para el caso concreto de las operaciones por columnas te recomiendo que leas este artículo: https://dplyr.tidyverse.org/articles/rowwise.html

Saludos,
Emilio

PS: La solución sum(x[x>0]) serviría pero haciendo el bucle por FILAS, que es lo que quieres, y guardándolo en algún vector.



> El 2 ene 2023, a las 11:23, Manuel Mendoza <mmendoza using fulbrightmail.org> 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
>> 
> 
> 	[[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