2012-08-03 11 views
5

Estoy tratando de hacer un análisis de secuencia utilizando datos del diario de tiempo (American Time Use Survey) usando TraMineR en R. Tengo los datos como datos de SPELL (id, hora de inicio, hora de detención, evento) pero recibo el siguiente error al intentar convertir a STS o datos de MSF:Uso de datos del diario de tiempo con TraMineR

Error in as.matrix.data.frame(subset(data, , 2)) : dims [product 0] do not match the length of object [9]

creo que tiene algo que ver con la forma en convierto mi tiempo (como personaje) a tipos de fecha/hora. Creo que TraMineR requiere un formato POSIXlt?

Aquí hay un fragmento de mis datos en bruto (trcode es el caso)

head(atus.act.short)

 tucaseid tustarttim tustoptime trcode 
1 2.00701e+13 04:00:00 08:00:00 10101 
2 2.00701e+13 08:00:00 08:20:00 110101 
3 2.00701e+13 08:20:00 08:50:00 10201 
4 2.00701e+13 08:50:00 09:30:00 20102 
5 2.00701e+13 09:30:00 09:40:00 180201 
6 2.00701e+13 09:40:00 11:40:00 20102 

utilizo strptime para convertir las cadenas de caracteres a POSIXlt:

atus.act.short$starttime.new <- strptime(atus.act.short$tustarttim, format="%X") 
atus.act.short$stoptime.new <- strptime(atus.act.short$tustoptime, format="%X") 

También cortar el ID hasta solo dos dígitos

atus.act.short$id <- atus.act.short$tucaseid-20070101070000 

termino con una nueva trama de datos de la siguiente manera:

id  starttime.new  stoptime.new trcode 
1 44 2012-08-03 04:00:00 2012-08-03 08:00:00 10101 
2 44 2012-08-03 08:00:00 2012-08-03 08:20:00 110101 
3 44 2012-08-03 08:20:00 2012-08-03 08:50:00 10201 
4 44 2012-08-03 08:50:00 2012-08-03 09:30:00 20102 
5 44 2012-08-03 09:30:00 2012-08-03 09:40:00 180201 
6 44 2012-08-03 09:40:00 2012-08-03 11:40:00 20102 
7 44 2012-08-03 11:40:00 2012-08-03 11:50:00 180201 
8 44 2012-08-03 11:50:00 2012-08-03 12:05:00 20102 
9 44 2012-08-03 12:05:00 2012-08-03 13:05:00 120303 
10 44 2012-08-03 13:05:00 2012-08-03 13:20:00 180704 
11 44 2012-08-03 13:20:00 2012-08-03 15:20:00 70104 
12 44 2012-08-03 15:20:00 2012-08-03 15:35:00 180704 
13 44 2012-08-03 15:35:00 2012-08-03 17:00:00 120303 
14 44 2012-08-03 17:00:00 2012-08-03 17:20:00 180701 
15 44 2012-08-03 17:20:00 2012-08-03 17:25:00 180701 
16 44 2012-08-03 17:25:00 2012-08-03 17:55:00 70101 
17 44 2012-08-03 17:55:00 2012-08-03 18:00:00 181203 
18 44 2012-08-03 18:00:00 2012-08-03 19:00:00 120303 
19 44 2012-08-03 19:00:00 2012-08-03 19:30:00 110101 
20 44 2012-08-03 19:30:00 2012-08-03 21:30:00 120303 
21 44 2012-08-03 21:30:00 2012-08-03 23:00:00 10101 
22 44 2012-08-03 23:00:00 2012-08-03 23:03:00 10201 
26 48 2012-08-03 06:45:00 2012-08-03 08:15:00 10201 
27 48 2012-08-03 08:15:00 2012-08-03 08:45:00 180209 
28 48 2012-08-03 08:45:00 2012-08-03 09:00:00 20902 
29 48 2012-08-03 09:00:00 2012-08-03 11:00:00 50101 
30 48 2012-08-03 11:00:00 2012-08-03 11:45:00 120312 

entonces trato de crear un objeto de secuencia [usando la biblioteca (traminer)]

atus.seq <- seqdef(atus.act.short, informat = "SPELL", id="id") 

Y me sale el siguiente error:

Error in as.matrix.data.frame(subset(data, , 2)) : dims [product 0] do not match the length of object [9]

¿Pensamientos?

+0

he logrado solucionar este convirtiendo el tiempo de minutos (después de otro preguntas sobre stackoverflow), haciendo que el código de estado de un personaje (as.character), utilizando seqformat, y asignarlo a un eje de tiempo. El nuevo código dice: 'atus.seq2 <- seqformat (atus.act.short2, id =" id ", from =" SPELL ", to =" STS ", begin =" startmin ", end =" stopmin ", status =" trcode ", process =" FALSE ")' – mCorey

+0

¿Puedes publicar esto como respuesta y aceptarlo como el correcto? –

Respuesta

4

He logrado solucionar esto convirtiendo el tiempo en minutos (siguiendo otras preguntas en stackoverflow), haciendo que el código de estado sea un carácter (como.caracter), usando seqformat y asignándolo a un eje de tiempo. El nuevo código lee:

atus.seq2 <- seqformat(atus.act.short2, id="id", from="SPELL", to="STS", begin = "startmin", end = "stopmin", status="trcode", process = "FALSE")

Cuestiones relacionadas