[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