-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Estimada comunidad, tengo el siguiente problema: 1. tengo un data.frame con varias columnas, algunas numericas, otras son variables categoricas 2. necesito hacer un calculo simple sobre este data.frame (un promedio ponderado de los valores de la columna 7), pero solo para las filas que cumplan ciertos criterios 3. en ocasiones ninguna de las filas cumple todos los criterios exigidos, lo que genera un NA 4. cuando se usa ese NA en el calculo del promedio ponderado genera un NaN obviamente la pregunta es, como puedo evitar esto ? pues dada la naturaleza del calculo (un promedio ponderado) si existe un NA se puede simplemente ignorar, pero no se como hacerlo. adjunto el codigo y los archivos a ver si me dan una mano para evitar hacer esos calculos a mano ui1 <- (mean(graph[graph$sol=="con" & graph$dia==1 & graph$NIns==1, 7],na.rm = TRUE) + mean(graph[graph$sol=="con" & graph$dia==1 & graph$NIns==2, 7],na.rm = TRUE)*2 + mean(graph[graph$sol=="con" & graph$dia==1 & graph$NIns==3, 7],na.rm = TRUE)*3)/100 uno nunca explica bien lo que pasa o quiere hacer, asi es que cualquier duda me escriben por favor muchas gracias, eric. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRdr4aAAoJEDoUMoeY1RuMkbUH/2F6HyDiYhLuFp74r3+O++8J iRuqJthhyaDTBuEKa/t3F9WsBWL/iWkShNnE5wYKR7rY/Z7dgFM/+9GAbQEOFXgY UBv3vHk0DN9592WNnYfUcGWsgBHoxMvYN+jeFXjUsG7BEQNFDiI8PzPZ3J1smmQd RZ5vI2zgTv4f5B11ZKd5i6t0lMVxZclryi0/lQ+vtg7eKq7J/6CTz7IJVlM90wIn 8gUnqaIycg/yQPgC17cfRkuWHEBuqGRfxbMmOoqnf1szntYzXLv3G3Vuhj8wfh0Q icE6SX2BdaYv8hhg1bojeASUe0mu9WfTjIYjILvy8UFLZBPFRA+yhza4GZsc9gA=00hy -----END PGP SIGNATURE----- ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: graph.csv Type: text/csv Size: 51115 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130423/3ccd0049/attachment-0001.bin>
Jose Luis Cañadas
2013-Apr-23 17:54 UTC
[R-es] Problemas con NA y el calculo de un promedio ponderado
Hola Eric. Quizá esto te sirva # Crear 3 vectores con las diferentes condiciones, la cond3 no se cumple en ningún caso de los # datos que envias cond1 <- graph$sol == "con" & graph$dia == 1 & graph$NIns == 1 cond2 <- graph$sol == "con" & graph$dia == 1 & graph$NIns == 2 cond3 <- graph$sol == "con" & graph$dia == 1 & graph$NIns == 3 # Crear un vector pesos que valga 1 para los que cumplan cond1, 2 para cond2, 3 para cond3 # y 0 para el resto graph$pesos[cond1] <- 1 graph$pesos[cond2] <- 2 graph$pesos[cond3] <- 3 graph$pesos[is.na(graph$pesos)] <- 0 # Utilizar weigthed.mean para calcular la media ponderada. with( graph, weighted.mean(area, pesos) ) Saludos El 23/04/13 19:00, neo escribió:> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Estimada comunidad, tengo el siguiente problema: > > 1. tengo un data.frame con varias columnas, algunas numericas, otras son > variables categoricas > 2. necesito hacer un calculo simple sobre este data.frame (un promedio > ponderado de los valores de la columna 7), pero solo para las filas que > cumplan ciertos criterios > 3. en ocasiones ninguna de las filas cumple todos los criterios > exigidos, lo que genera un NA > 4. cuando se usa ese NA en el calculo del promedio ponderado genera un NaN > > obviamente la pregunta es, como puedo evitar esto ? pues dada la > naturaleza del calculo (un promedio ponderado) si existe un NA se puede > simplemente ignorar, pero no se como hacerlo. > > adjunto el codigo y los archivos a ver si me dan una mano para evitar > hacer esos calculos a mano > > ui1 <- (mean(graph[graph$sol=="con" & graph$dia==1 & graph$NIns==1, > 7],na.rm = TRUE) + mean(graph[graph$sol=="con" & graph$dia==1 & > graph$NIns==2, 7],na.rm = TRUE)*2 + mean(graph[graph$sol=="con" & > graph$dia==1 & graph$NIns==3, 7],na.rm = TRUE)*3)/100 > > uno nunca explica bien lo que pasa o quiere hacer, asi es que cualquier > duda me escriben por favor > > muchas gracias, eric. > > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.11 (GNU/Linux) > Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ > > iQEcBAEBAgAGBQJRdr4aAAoJEDoUMoeY1RuMkbUH/2F6HyDiYhLuFp74r3+O++8J > iRuqJthhyaDTBuEKa/t3F9WsBWL/iWkShNnE5wYKR7rY/Z7dgFM/+9GAbQEOFXgY > UBv3vHk0DN9592WNnYfUcGWsgBHoxMvYN+jeFXjUsG7BEQNFDiI8PzPZ3J1smmQd > RZ5vI2zgTv4f5B11ZKd5i6t0lMVxZclryi0/lQ+vtg7eKq7J/6CTz7IJVlM90wIn > 8gUnqaIycg/yQPgC17cfRkuWHEBuqGRfxbMmOoqnf1szntYzXLv3G3Vuhj8wfh0Q > icE6SX2BdaYv8hhg1bojeASUe0mu9WfTjIYjILvy8UFLZBPFRA+yhza4GZsc9gA> =00hy > -----END PGP SIGNATURE----- > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 ok, voy a probar jose, muchas gracias, eric, On 04/23/2013 02:54 PM, Jose Luis Cañadas wrote:> Hola Eric. > > Quizá esto te sirva > > # Crear 3 vectores con las diferentes condiciones, la cond3 no se cumple > en ningún caso de los > # datos que envias > > cond1 <- graph$sol == "con" & graph$dia == 1 & graph$NIns == 1 > cond2 <- graph$sol == "con" & graph$dia == 1 & graph$NIns == 2 > cond3 <- graph$sol == "con" & graph$dia == 1 & graph$NIns == 3 > > # Crear un vector pesos que valga 1 para los que cumplan cond1, 2 para > cond2, 3 para cond3 > # y 0 para el resto > graph$pesos[cond1] <- 1 > graph$pesos[cond2] <- 2 > graph$pesos[cond3] <- 3 > graph$pesos[is.na(graph$pesos)] <- 0 > > # Utilizar weigthed.mean para calcular la media ponderada. > with( graph, weighted.mean(area, pesos) ) > > Saludos > > El 23/04/13 19:00, neo escribió: > Estimada comunidad, tengo el siguiente problema: > > 1. tengo un data.frame con varias columnas, algunas numericas, otras son > variables categoricas > 2. necesito hacer un calculo simple sobre este data.frame (un promedio > ponderado de los valores de la columna 7), pero solo para las filas que > cumplan ciertos criterios > 3. en ocasiones ninguna de las filas cumple todos los criterios > exigidos, lo que genera un NA > 4. cuando se usa ese NA en el calculo del promedio ponderado genera un NaN > > obviamente la pregunta es, como puedo evitar esto ? pues dada la > naturaleza del calculo (un promedio ponderado) si existe un NA se puede > simplemente ignorar, pero no se como hacerlo. > > adjunto el codigo y los archivos a ver si me dan una mano para evitar > hacer esos calculos a mano > > ui1 <- (mean(graph[graph$sol=="con" & graph$dia==1 & graph$NIns==1, > 7],na.rm = TRUE) + mean(graph[graph$sol=="con" & graph$dia==1 & > graph$NIns==2, 7],na.rm = TRUE)*2 + mean(graph[graph$sol=="con" & > graph$dia==1 & graph$NIns==3, 7],na.rm = TRUE)*3)/100 > > uno nunca explica bien lo que pasa o quiere hacer, asi es que cualquier > duda me escriben por favor > > muchas gracias, eric. > > > >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRdu1SAAoJEDoUMoeY1RuMVaMH/RgM38IJaTXMn2koctWpNi2Q UpVGB+sezKkO1uAVKVuNB+JtKS0R3oP7roiYft4vV4E/C7JZZ7uGA/4G176GdXhF vzTK1MxRNq0RD5p61Z9i02ut1v8iSLn9wFVIg/yDBzNEWsAkNi62KRoYFJAZ9JCt pNoW64NSPuRNUEVujdEbxiGgwpCsNRqHKJpEHaqfDW8c5auI103qa7uDvyRErtoa oB4/6KlT5BAVUlhT7qwYUdZfbaxIQ7RbMJ89Qcsvwoi78z1/NrdYrwLumud5n8Mg T+1d0rByBMk26w6bow9zEByFla/R3s3L1LFWDfG12al3uB+ICRrBUCC4fekmTIM=DTKL -----END PGP SIGNATURE-----