Re: [R-es] Sumar positivos y negativos por separado
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 ageeducation income NA 4.11e+08 NA 1.040430e+05 NA 8.814500e+07 statusquo vote 1.203598e+03 NA > sapply(Chile, FUN = sumn) region populationsexage 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 () 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 > > > > > > 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 > > > > 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.o
Re: [R-es] Sumar positivos y negativos por separado
Gracias Carlos, y aprovecho para felicitaros también el año nuevo.. Manuel El lun, 2 ene 2023 a las 13:03, Carlos Ortega () escribió: > Hola, > > Feliz Año!. > Por no dejar pasar la oportunidad de usar algo más vectorizado... y > rapidito... > Incluyo tiempos comprativos. > > #- > > library(mlbench) > > library(data.table) > > library(dplyr) > > library(tictoc) > > > > data(Ionosphere) > > head(Ionosphere) > V1 V2 V3 V4 V5 V6 V7 V8 V9 > V10 V11 V12 V13 V14 > 1 1 0 0.99539 -0.05889 0.85243 0.02306 0.83398 -0.37708 1.0 > 0.03760 0.85243 -0.17755 0.59755 -0.44945 > 2 1 0 1.0 -0.18829 0.93035 -0.36156 -0.10868 -0.93597 1.0 > -0.04549 0.50874 -0.67743 0.34432 -0.69707 > 3 1 0 1.0 -0.03365 1.0 0.00485 1.0 -0.12062 0.88965 > 0.01198 0.73082 0.05346 0.85443 0.00827 > 4 1 0 1.0 -0.45161 1.0 1.0 0.71216 -1.0 0.0 > 0.0 0.0 0.0 0.0 0.0 > 5 1 0 1.0 -0.02401 0.94140 0.06531 0.92106 -0.23255 0.77152 > -0.16399 0.52798 -0.20275 0.56409 -0.00712 > 6 1 0 0.02337 -0.00592 -0.09924 -0.11949 -0.00763 -0.11824 0.14706 > 0.06637 0.03786 -0.06302 0.0 0.0 >V15 V16 V17 V18 V19 V20 V21 V22 > V23 V24 V25 V26 > 1 0.60536 -0.38223 0.84356 -0.38542 0.58212 -0.32192 0.56971 -0.29674 > 0.36946 -0.47357 0.56811 -0.51171 > 2 -0.51685 -0.97515 0.05499 -0.62237 0.33109 -1.0 -0.13151 -0.45300 > -0.18056 -0.35734 -0.20332 -0.26569 > 3 0.54591 0.00299 0.83775 -0.13644 0.75535 -0.08540 0.70887 -0.27502 > 0.43385 -0.12062 0.57528 -0.40220 > 4 -1.0 0.14516 0.54094 -0.39330 -1.0 -0.54467 -0.69975 1.0 > 0.0 0.0 1.0 0.90695 > 5 0.34395 -0.27457 0.52940 -0.21780 0.45107 -0.17813 0.05982 -0.35575 > 0.02309 -0.52879 0.03286 -0.65158 > 6 -0.04572 -0.15540 -0.00343 -0.10196 -0.11575 -0.05414 0.01838 0.03669 > 0.01519 0.00888 0.03513 -0.01535 >V27 V28 V29 V30 V31 V32 V33 V34 > Class > 1 0.41078 -0.46168 0.21266 -0.34090 0.42267 -0.54487 0.18641 -0.45300 > good > 2 -0.20468 -0.18401 -0.19040 -0.11593 -0.16626 -0.06288 -0.13738 -0.02447 > bad > 3 0.58984 -0.22145 0.43100 -0.17365 0.60436 -0.24180 0.56045 -0.38238 > good > 4 0.51613 1.0 1.0 -0.20099 0.25682 1.0 -0.32382 1.0 > bad > 5 0.13290 -0.53206 0.02431 -0.62197 -0.05707 -0.59573 -0.04608 -0.65697 > good > 6 -0.03240 0.09223 -0.07859 0.00732 0.0 0.0 -0.00039 0.12011 > bad > > > > data <- Ionosphere %>% select(where(is.numeric)) %>% as.data.frame() > > > *> #-- Vectorizado* > > tic() > > myfun <- function(x) { > + > + pos <- sum(x[x > 0]) > + neg <- sum(x[x < 0]) > + > + return(list(pos = pos, neg = neg)) > + } > > > > resout <- apply(data, 1, myfun) > > resend <- rbindlist(resout) > > toc() > *0.012 sec elapsed* > > head(resend) > pos neg > > 1: 9.96328 -5.23501 > 2: 4.16949 -8.80629 > 3: 11.59911 -2.19323 > 4: 12.07816 -5.61414 > 5: 6.38876 -5.34692 > 6: 0.60859 -1.01667 > > > > > *> # Bucle* > > tic() > > pos <-c(rep(0, nrow(data))) > > neg <- c(rep(0, nrow(data))) > > > > for (i in 1:nrow(data)) { > + x<-data[i,] > + pos[i]<-sum(x[x>0]) > + neg[i]<-sum(x[x<0]) > + } > > toc() > *0.609 sec elapsed* > > head(pos) > [1] 9.96328 4.16949 11.59911 12.07816 6.38876 0.60859 > > head(neg) > [1] -5.23501 -8.80629 -2.19323 -5.61414 -5.34692 -1.01667 > > > #- > > > > Gracias, > Carlos Ortega > www.qualityexcellence.es > > > > El lun, 2 ene 2023 a las 11:58, Manuel Mendoza (< > mmend...@fulbrightmail.org>) escribió: > >> Bueno, funcionó con: >> >> pos<-c(0) >> for (i in 1:nrow(data)) { >> x<-data[i,] >> pos[i]<-sum(x[x>0]) >> } >> >> y x<0 para los negativos >> >> Gracias nuevamente, >> Manuel >> >> >> El lun, 2 ene 2023 a las 10:23, Proyecto R-UCA () 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 >> > > abc >> > > 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 >> > >
Re: [R-es] Sumar positivos y negativos por separado
Bueno, funcionó con: pos<-c(0) for (i in 1:nrow(data)) { x<-data[i,] pos[i]<-sum(x[x>0]) } y x<0 para los negativos Gracias nuevamente, Manuel El lun, 2 ene 2023 a las 10:23, Proyecto R-UCA () 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 > > abc > > 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 > > > > 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 > 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 > [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] Sumar positivos y negativos por separado
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 > 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 () 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 >>> abc >>> 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 >>> >>> 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 >> 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 >> > > [[alternative HTML version deleted]] > > ___ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] Sumar positivos y negativos por separado
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 () 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 > > abc > > 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 > > > > 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 > 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 > [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] Sumar positivos y negativos por separado
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 > > 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 > > 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
Re: [R-es] Sumar positivos y negativos por separado
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 abc 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 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 > 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://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
[R-es] Sumar positivos y negativos por separado
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://stat.ethz.ch/mailman/listinfo/r-help-es