Acerca de… ¿Cómo mide el tiempo LibreOffice?

He leído por ahí que lo mide en segundos, pero no estoy seguro, si tu pones en una celda un número y le pides a Calc que te diga qué es ese valor en tiempo te da una fecha.

Qué hace Calc cuando le damos un número y le decimos que es tiempo.

¿Qué hace LibreOffice Calc cuando le damos un número y le decimos que es tiempo?

Así que parece que para LibreOffice el Big Bang fue el 30 de Diciembre de 1899… interesante

¿Que pasó ese día? No he podido encontrar nada en la Wikipedia ni en google, nada extraordinario, no sé, me había hecho la ilusión de que AlanTuring o alguien así había nacido ese día y que era un Huevo de Pascua. Pero seguro que es por alguna razón más pragmática.

Como veis (Fila 3), si ponemos decimales nos divide el día. Pero ¿Qué pasa si ponemos números negativos?

Con números negativos funciona igual, pero para atrás.

Con números negativos funciona igual, pero para atrás.

Pues como cabía esperar va para atrás. Resta el tiempo desde el BigBang.

Para que LibreOffice nos enseñe eso tenemos que cambiar el formatio de la celda donde queremos ver la fecha. Una vez seleccionada la celda o celdas que nos interesan ir a formato>celda>números. Allí, donde pone personalizado o algo así, especificar que el formato que queremos es D MMM YYY HH:MM. No pongáis más de una D por que os pondrá el día de la semana, para otras cosas es muy útil, pero aquí pierde toda la gracia.

Pero vamos a lo práctico, al motivo por el que he empezado a rascar en todo esto. Yo cuento lo que corro en diversas unidades de tiempo, la mayoría de los que corren usan el ritmo, que son minutos por kilómetro. Pues eso, quiero que LibreOffice me haga los cálculos.

Que pasa si tenemos el tiempo en minutos, p.e. he corrido 62 minutos. Como LibreOffice espera que le metamos los datos de tiempo en días tememos que pasar esos 62 minutos a días ¿Cómo lo hacemos?

Sabemos que un día tiene 60×24 minutos, es decir 60 minutos por cada hora y un total de 24 horas. Esto son 1440 minutos, visto así parece que un día sea muy corto… o muy largo… no sé. Dividimos 62 entre1440 y así sabemos que proporción de día representan esos 62 minutos, nada más y nada menos que 0,0430555555556 días, más o menos el 4.3% de un día.

Pero cómo hacemos esto en lenguaje de hoja de cálculo:

¿Qué efecto produce cada formato de celda?

¿Qué efecto produce cada formato de celda?

Lo primero que hay que hacer es escribir el nuestro valor en decimal, 62 (columna B). En la celda de al lado (columna C) mostramos/calculamos la proporción de día que representan esos minutos, usamos la formula =B2/60/24 o B2/1440, entonces en la celda veremos el valor en decimal, 0.043… porque el formato de la celda es “numero”. Pero nosotros no queremos saber ese valor, queremos saber nuestro valor en formato tiempo. Eso está hecho en la columna D. Es la misma fórmula, pero cambiando el formato de celda a MM:SS ¡Pero qué pasa! ¡2:00! ¿Pero no son 62 minutos? Claro, son 62 minutos, pero nadie le ha dicho a LibreOffice que queremos ver horas… ¿No, le hemos dicho MM:SS? Pues eso vemos. Como 62 minutos son más de una hora LibreOffice nos enseña esos 2 minutos que sobran, porque el formato es MM:SS. Para ver los 60 minutos (es decir 1 hora) tenemos que decirle formato HH:MM:SS (columna E).

Así que lo que le estamos diciendo a LibreOffice al cambiar el formato es algo así como: “Eso que te viene después del igual va a ser tiempo (LibreOffice espera días) y enséñamelo con tal formato (MM:SS o HH:MM:SS).”

Sabiendo esto os voy a enseñar la tablita que me he hecho para calcular todos los formatos posibles (No absurdos) de medir el tiempo que estoy corriendo:

Un montón de formas de expresar el ritmo al que corro.

Un montón de formas de expresar el ritmo al que corro.

¿Qué tenemos aquí?

Columnas B, C y D. Nuestros datos de origen, distancia en metros o kilómetros y minutos.

Columna E. Los minutos en formato de tiempo. Con esa formula (=D4/24/60) y ese formato ([MM]) le decimos a LibreOffice coge lo que haya en la celda D4, me lo divides entre 60 y entre 24 (o entre 1440) y lo que te dé es tiempo y me lo enseñas en minutos. Como veis, esta vez no hay problema si es más de una hora, porque he puesto MM entre corchetes ([MM]) esto le dice a LibreOffice: Pasa de las horas, solo quiero saber minutos.

Columna F. Horas, pero en decimal. Aquí, con este formato y esta fórmula, le estamos diciendo a LibreOffice, coge D4 y me lo divides entre 60, lo que te venga es un número. Dividimos entre 60 porque estamos viendo qué proporción de 1 hora representan los minutos que hemos corrido: 0.75 es decir ¾ de hora para 45 minutos y 1.13 horas para 68 minutos ¿Mola, he?

Las columnas G, H, I y J os las dejo a vosotros que me tengo que ir a la cama. Estoy abierto a preguntas y comentarios, pero no esperéis mucho más de mi… esto es todo lo que se.

Buenas noches.

Acerca de… Anuncio de las IV Jornadas de Usuarios de R

Pues eso, os pego el anuncio que han colgado en la lista de usuarios de R.

“Escribo en nombre de los comités organizador y científico de las IV
Jornadas de Usuarios de R para anunciarlas pública y oficialmente.
Tendrán lugar los días 15 y 16 de noviembre en el CREAL
(http://www.creal.cat/), Barcelona y está coorganizadas por el CREAL,
el Grupo de Usuarios de R de Barcelona y la Comunidad R Hispano.

Toda la información necesaria para participar y registrarse está disponible en

http://www.r-es.org/IV+Jornadas

Quiero invitar a todos a acudir, participar y difundir la noticia de
esta nueva edición de las Jornadas de Usuarios de R. Aprovecho también
la ocasión para agradecer la labor de quienes las han hecho posible y
saludar y recordar a quienes colaboraron en las ediciones anteriores.”

Por cierto, podéis suscribiros a la lista aquí.

Más información sobre usuarios de R en español aquí.

jaume.

Acerca de… NA’s, valores perdidos.

Hola

Aun recuerdo como me ilusionó saber que si dentro del paréntesis de la media pones na.rm=T el R pasa de los NA.

> v<-c(1,2,3,NA,4)
> mean(v)
[1] NA
> mean(v,na.rm=T)
[1] 2.5

Por que esto es muy cómodo, de hecho lo puedes meter en tu propia función para la media:


# datos de ejemplo
> coches<-cars
# metamos un NA
> coches[10,1]<-NA
# la media
> apply(coches,MARGIN=2,FUN=mean)
speed  dist
NA 42.98
# nuestra función
> mimedia<-function(x) mean(x, na.rm=TRUE)
> apply(cars,MARGIN=2,FUN=mimedia)
speed  dist
15.40 42.98

Y meter la función mimedia donde te de la gana.
Así podia deshacerme de los puñeteros NA que no sabía muy bien de donde venian ni para que servian.

Claro, con el tiempo uno aprende que los NA dependiendo de donde vengan pueden significar cosas muy distintas y que a veces podemos ignorarlos.
Pero a veces conviene convertirlos en un valor interesante.

coches[is.na(coches)]<-"valorinteresante"

O borrarlos:

coches<-cars
coches[10,1]<-NA
coches.sin.na<-coches[!is.na(coches$speed),]

Esto viene a cuento de esta entrada donde explica como son los NA según de donde vengan. Sabiendo eso podemos trabajar de una forma u otra. Ya que a veces la distribución de los NA puede estar sesgada y entonces no vale borrarlos o ignorarlos.

jaume

Acerca de… listas de especies

Hola.

No se si recordáis aquella entrada en que os describía como hacer que R nos preguntara cunado cuando había encontrado un NA.

Pues hoy, en el Blog de Luis Cayuela, hay una entrada con un problema similar. Él tiene el problema a la hora de determinar, por ejemplo, si los nombres de las especies son correctos o si dos nombres diferentes corresponden a la misma especie.

Es interesante por que además nos ofrece información sobre una iniciativa interesante The Plant List que intenta poner en un solo lugar todos los nombres aceptados de plantas vasculares, con sus sinónimos, autorías, etc.

Espero que os sea útil.

Jaume.

Acerca de… Jornadas de ususarios de R

Hace ya más de una semana que terminaron y creo que es interesante hablar de ellas aquí.

Ya está diponible el libro de resumenes. Está muy bien por que junto al resumen te da la opción de ir a la ponencia.

Hay varias sobre ecología:

Algunas aplicaciones de R en ecología: de la docencia elemental a la investigación avanzada.

Marcelino de la Cruz Rot. Universidad Politécnica de Madrid.

Presentación

Detección de patrones espaciales de biodiversidad de árboles y mamíferos en la Península Ibérica.

Jennifer Morales Barbero, Rafael Francisco García Vázquez y Dolores Ferrer Castán. Área de Ecología, Universidad de Salamanca.

Presentación

Correcciones taxonómicas de grandes bases de datos de forma automatizada.

Luis Cayuela. Universidad Rey Juan Carlos.

Presentación

Además hay algunos sobre supervivencia que se podrían aplicar a algunos estudios ecológicos.

jaume

Acerca de… si es que el R sirve para todo.

En el blog sobre ecología y evolución EBB Flow. Nos han felicitado Halloween con una tarjeta hecha en R.

Os pego el código:


###required libraries
##if you do not have the "fields" and "MBA" libraries, you need this step to install them
install.packages("fields")
install.packages("MBA")
## load libraries
library(fields)
library(MBA)

###data
data<-matrix(c(44.9186,81.0824,46.9512,80.1061,49.187,80.7055,57.9268,80.1493,60.3659
 ,81.34,69.3089,80.1941,78.4553,79.2459,91.8699,70.834,99.7967,55.9047
 ,101.2195,30.9102,96.1381,17.3075,85.5691,7.4235,74.3902,4.2299
 ,61.7886,1.8181,55.4878,1.0059,49.187,0.9811,45.3252,1.7532,37.1951
 ,1.9181,20.3252,7.1666,8.9431,17.1612,4.2683,29.1507,4.2683,50.8042
 ,9.5528,66.3761,18.4959,76.2539,29.065,80.6261 ,38.6179,80.8607
 ,44.9186,81.0824)
 ,ncol=2,byrow=TRUE)
stem<-matrix(c(60.3659,81.34,57.9268,80.1493,49.187,80.7055,46.9512,80.1061,44.9186
 ,81.0824,45.5285,83.6438,47.561,88.1794,44.1057,97.2209,48.7805,99.9952
 ,54.878,87.6176,60.3659,81.34)
 ,ncol=2,byrow=TRUE)
eye<-matrix(c(45.935,46.4407,34.1463,44.8195,36.7886,46.9952,36.382,50.9306,32.3171,53.08
 ,29.065,53.0672,26.0163,49.7086,28.0488,45.1892,20.3252,48.7021,20.1219
 ,55.3942,23.5772,61.1164,30.8942,65.476,32.3171,59.7729,45.935,46.4407)
 ,ncol=2,byrow=TRUE)
eye2<-matrix(c(58.9431,46.6888,65.4472,51.2419,71.748,56.9754,74.3902,65.4504,82.7236
 ,59.7745,84.9593,56.4368,84.7561,48.562,77.439,45.7772,78.8618,50.5072
 ,74.3902,53.6393,69.9186,51.6532,68.6992,47.9083,70.5285,44.9627,58.9431
 ,46.6888)
 ,ncol=2,byrow=TRUE)
mouth<-matrix(c(8.9431,44.7202,23.374,41.2338,30.0813,22.7562,38.2114,38.5363,65.0407
 ,38.445,73.374,22.533,80.2846,40.8673,96.9512,44.673,93.4959,31.8641
 ,84.1463,18.8352,66.2602,9.7097,61.9919,16.1889,59.3496,8.3045,45.5285
 ,8.447,42.8862,16.1137,38.2114,9.4024,22.7642 ,17.4125,11.9919,31.7401
 ,8.9431,44.7202)
 ,ncol=2,byrow=TRUE)
stars<-matrix(c(sample(seq(0,100),80),sample(seq(20,100),80,replace=TRUE)),ncol=2)

###plot
par(bg = "black")
par(mar=c(5,2,4,2))+0.1
plot(data,type="n",xlim=c(0,100),ylim=c(0,100),xaxt="n",yaxt="n",xlab="",ylab="",axes=FALSE)
symbols(x=stars[,1],y=stars[,2]
 ,circles=rep(0.001,nrow(stars))
 ,inches=0.015,bg="white"
 ,xlim=c(0,100),ylim=c(0,100))
col<-runif(nrow(data),min=4,max=7)
datmb<-mba.surf(matrix(cbind(data,col),ncol=3),no.X=200,no.Y=200,extend=FALSE)
image(datmb$xyz,zlim=c(0,10),col=heat.colors(40),add=TRUE)
polygon(stem,col="darkgreen")
polygon(eye,col="yellow")
polygon(eye2,col="yellow")
polygon(mouth,col="yellow")
points(data,type="l")
mtext("Happy Halloween",side=3,col="green3",cex=3.5,font=4)
mtext("from the EEB and Flow",side=1,col="green3",cex=2.5,font=4)

Ale, a destriparlo y a aprender cosas sobre gráficos en R.

No os perdáis el segundo comentario.

jaume