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]]
Carlos J. Gil Bellosta
2015-Jul-27 18:28 UTC
[R-es] Como modificar valores en un data frame
Hola, ¿qué tal? Por ejemplo, así: aves$area <- log10(aves$area) etc. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El 27 de julio de 2015, 20: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 >[[alternative HTML version deleted]]
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
[[alternative HTML version deleted]]
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]]
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]]