Hola, Por utilizar alguna de las referencias que te ha aportado Daniel y que veas cómo se utilizan sobre un mismo ejemplo: #----------------------- library(data.table) DT <- data.table(warpbreaks) head(DT) DT[, mean(breaks), by="tension"] DT[, mean(breaks), by="wool"] DT[, mean(breaks), by=c("wool","tension")] #---------- aggregate(breaks ~ wool, data = warpbreaks, mean) aggregate(breaks ~ wool + tension, data = warpbreaks, mean) #----------------------- Hay más varias formas más de hacer esto mismo. Mi sugerencia es que te quedes con "aggregate()" para empezar. Saludos, Carlos Ortega www.qualityexcellence.es El 27 de julio de 2015, 22:07, daniel <daniel319 en gmail.com> escribió:> Por favor mantén tus consultas dentro de r-help-es, a otras personas > también puede serle útil la pregunta o las respuestas, además tendrás > oportunidad de mejores respuestas de otros participantes. > > Interpreto que quieres algo así (uso mi ejemplo) > colMeans(aves) > # area dist distm otro > # 5.5 5.5 5.5 5.5 > colMeans(aves[aves$area > 6,1:2]) > #area dist > # 8.5 6.5 > > # si lo que buscas no exite como col... puedes usar apply > apply(aves[aves$area <= 6,1:2], 2, median) > # area dist > # 3.5 3.5 > > Te recomiendo leas ?aggregate, en el paquete plyr la función ddply o en el > paquete data.table la función data table ( no estoy seguro si usando estas > funciones primero no tienes que crear una nueva columna con los grupos > 6 > y <= 6, pero te lo dejo a ti. > > El 27 de julio de 2015, 16:32, Susana deus alvarez < > susanadeus.deusalvarez en gmail.com> escribió: > > > Perdón que te haga otra pregunta, pero también estoy trancada en otra > > cosa: con la matriz aves cree una nueva matriz donde divide la variable > > area en dos, una de area pequeña y otra de area grande. Entonces me > > quedaría un nuevo data.frame con 4 columnas: abundancia, area, area 2 > > (mayor a 10) y area3 (menor a 10), entonces querría hacer la media de la > > abundancia en función del area2, lo intento asi: media<- > tapply(dframe$V1, > > dframe$area2, mean) > > Pero no es asi porque yo quiero un solo número, no que me haga la media > de > > cada valor de area2, por lo que no se como hacer > > > > Muchas gracias > > > > Saludos > > > > > > > > El 27 de julio de 2015, 15:29, daniel <daniel319 en gmail.com> escribió: > > > >> Algo así es lo que buscas? > >> > >> aves <- data.frame( area = sample(10), dist = sample(10), distm > >> sample(10), otro = sample(10)) > >> str(aves) > >> #'data.frame': 10 obs. of 4 variables: > >> # $ area : int 4 6 10 2 9 7 3 8 1 5 > >> # $ dist : int 8 2 10 6 7 5 1 3 9 4 > >> # $ distm: int 1 9 7 10 6 4 3 8 2 5 > >> # $ otro : int 9 3 10 4 7 5 8 1 6 2 > >> avelog <- log10(aves[, c("area", "dist", "distm")]) > >> str(avelog) > >> #'data.frame': 10 obs. of 3 variables: > >> # $ area : num 0.602 0.778 1 0.301 0.954 ... > >> # $ dist : num 0.903 0.301 1 0.778 0.845 ... > >> # $ distm: num 0 0.954 0.845 1 0.778 ... > >> ?log10 > >> > >> Espero haber entendido bien tu pregunta. > >> > >> Daniel Merino > >> > >> El 27 de julio de 2015, 15:11, Susana deus alvarez < > >> susanadeus.deusalvarez en gmail.com> escribió: > >> > >>> Estimad en s, quería realizar una consulta > >>> > >>> Dado un data frame llamado aves, como puedo sustiuir las variables > area, > >>> dist y distm por sus logaritmos en base10 y volver a crear un data > frame? > >>> > >>> > >>> Muchas gracias > >>> > >>> Saludos > >>> > >>> Susana > >>> > >>> [[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 > >>> > >> > >> > >> > >> -- > >> Daniel > >> > > > > > > > -- > Daniel > > [[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 >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
javier.ruben.marcuzzi en gmail.com
2015-Jul-28 03:08 UTC
[R-es] función cantidad mayor de valores
Señores Tengo un problema, donde use distintas alternativas y el informe de error es el mismo. Mi ultima alternativa es una función que copio y pego junto con un ejemplo de uso.> g3 <- function(n_caracteres, codigo_llega){+ if (n_caracteres == 6) + { + res <- substr(codigo_llega, start=0, stop=4) + } + else + { + res <- codigo_llega + } + res + }> g3(6,"Javier Marcuzzi")[1] "Javi" Pero cuándo uso los datos reales, el mensaje de error es el siguiente (copio y pego lo último que se ve junto con el mensaje) [9989] QS01EE01 QS01EE02 QS01EE03 QS01EE04 QS01EE05 QS QS01 QS01E QS01EX QS01EX01 QS01EX02 [10000] QS [ reached getOption("max.print") -- omitted 846 entries ] 7148 Levels: QA QA01 QA01A QA01AA QA01AA01 QA01AA02 QA01AA03 QA01AA04 QA01AA30 QA01AA51 QA01AB ... QV10XX03 Warning message: In if (n_caracteres == 4) { : the condition has length > 1 and only the first element will be used ¿Alguna idea sobre ese mensaje, aparentemente hasta el elemento 10.000 funciona, luego tengo un problema (con la función que envío como con otras alternativas) Javier Rubén Marcuzzi Técnico en Industrias Lácteas Veterinario [[alternative HTML version deleted]]
Javier, Siguiendo tu ejemplo (debe existir una mejor manera de hacerlo vectorizando) el mensaje de error dice que espera que n_caracteres sea un elemento atómico y en su lugar tiene varios. Con un for al inicio creo que se soluciona: res <- NA g3 <- function(n_caracteres, codigo_llega){ for( i in 1:length(n_caracteres)) { if (n_caracteres[i] == 6) { resu <- substr(codigo_llega, start=0, stop=4) } else { resu <- codigo_llega } res <- c(res, resu) } res } g3(6,"Javier Marcuzzi") n <- c(6,8) cod <- c("Daniel Merino", "Javier Marcuzzi") g3(n,cod)[-1] # alternativamente usar na.omit Espero te sirva, Daniel Merino El 28 de julio de 2015, 0:08, <javier.ruben.marcuzzi en gmail.com> escribió:> Señores > > > > Tengo un problema, donde use distintas alternativas y el informe de error > es el mismo. > > > > Mi ultima alternativa es una función que copio y pego junto con un ejemplo > de uso. > > > g3 <- function(n_caracteres, codigo_llega){ > + if (n_caracteres == 6) > + { > + res <- substr(codigo_llega, start=0, stop=4) > + } > + else > + { > + res <- codigo_llega > + } > + res > + } > > g3(6,"Javier Marcuzzi") > [1] "Javi" > > Pero cuándo uso los datos reales, el mensaje de error es el siguiente > (copio y pego lo último que se ve junto con el mensaje) > > > [9989] QS01EE01 QS01EE02 QS01EE03 QS01EE04 QS01EE05 QS QS01 > QS01E QS01EX QS01EX01 QS01EX02 > [10000] QS > [ reached getOption("max.print") -- omitted 846 entries ] > 7148 Levels: QA QA01 QA01A QA01AA QA01AA01 QA01AA02 QA01AA03 QA01AA04 > QA01AA30 QA01AA51 QA01AB ... QV10XX03 > Warning message: > In if (n_caracteres == 4) { : > the condition has length > 1 and only the first element will be used > > > ¿Alguna idea sobre ese mensaje, aparentemente hasta el elemento 10.000 > funciona, luego tengo un problema (con la función que envío como con otras > alternativas) > > > > > > > > > Javier Rubén Marcuzzi > Técnico en Industrias Lácteas > Veterinario > [[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 >-- Daniel [[alternative HTML version deleted]]
Hola Javier, Intenta los siguientes cambios g4 <- function(codigo_llega, n_caracteres){ codigo_llega <- as.character(codigo_llega) if(n_caracteres == 6) res <- substr(codigo_llega, start=0, stop=4) else res <- codigo_llega res } g4 <- Vectorize(g4) x <- c('Jorge Velez','Javier Marcuzzi','Daniel Merino','Susana deus Alvarez', 'Carlos Ortega') g4(x, 6) g4(x, 4) Saludos cordiales, Jorge.- 2015-07-28 13:08 GMT+10:00 <javier.ruben.marcuzzi en gmail.com>:> Señores > > > > Tengo un problema, donde use distintas alternativas y el informe de error > es el mismo. > > > > Mi ultima alternativa es una función que copio y pego junto con un ejemplo > de uso. > > > g3 <- function(n_caracteres, codigo_llega){ > + if (n_caracteres == 6) > + { > + res <- substr(codigo_llega, start=0, stop=4) > + } > + else > + { > + res <- codigo_llega > + } > + res > + } > > g3(6,"Javier Marcuzzi") > [1] "Javi" > > Pero cuándo uso los datos reales, el mensaje de error es el siguiente > (copio y pego lo último que se ve junto con el mensaje) > > > [9989] QS01EE01 QS01EE02 QS01EE03 QS01EE04 QS01EE05 QS QS01 > QS01E QS01EX QS01EX01 QS01EX02 > [10000] QS > [ reached getOption("max.print") -- omitted 846 entries ] > 7148 Levels: QA QA01 QA01A QA01AA QA01AA01 QA01AA02 QA01AA03 QA01AA04 > QA01AA30 QA01AA51 QA01AB ... QV10XX03 > Warning message: > In if (n_caracteres == 4) { : > the condition has length > 1 and only the first element will be used > > > ¿Alguna idea sobre ese mensaje, aparentemente hasta el elemento 10.000 > funciona, luego tengo un problema (con la función que envío como con otras > alternativas) > > > > > > > > > Javier Rubén Marcuzzi > Técnico en Industrias Lácteas > Veterinario > [[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 >[[alternative HTML version deleted]]