2012-08-03 61 views
5

Tôi đang cố gắng phân tích chuỗi bằng cách sử dụng dữ liệu nhật ký thời gian (American Time Use Survey) bằng TraMineR trong R. Tôi có dữ liệu như dữ liệu SPELL (id, thời gian bắt đầu, thời gian dừng, sự kiện) nhưng tôi nhận được lỗi sau khi cố gắng chuyển nó sang STS hoặc dữ liệu SPS:Sử dụng dữ liệu nhật ký thời gian với TraMineR

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

tôi tin rằng nó có cái gì để làm với làm thế nào tôi chuyển đổi thời gian của tôi (như nhân vật) để loại ngày/giờ. Tôi tin rằng TraMineR yêu cầu định dạng POSIXlt?

Dưới đây là một đoạn dữ liệu thô của tôi (trcode là sự kiện)

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 

tôi sử dụng strptime để chuyển đổi chuỗi ký tự để 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") 

Tôi cũng cắt ID chỉ xuống hai chữ số

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

tôi kết thúc với một khung dữ liệu mới như sau:

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 

Sau đó, tôi cố gắng tạo ra một đối tượng chuỗi [sử dụng thư viện (TraMineR)]

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

Và tôi nhận được lỗi sau:

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

Suy nghĩ?

+0

tôi đã quản lý để làm việc xung quanh này bằng cách chuyển đổi thời gian để phút (sau đây một câu hỏi về stackoverflow), làm cho mã trạng thái một nhân vật (as.character), sử dụng seqformat, và gán nó vào trục thời gian. Mã mới đọc: 'atus.seq2 <- seqformat (atus.act.short2, id =" id ", từ =" SPELL ", tới =" STS ", bắt đầu =" startmin ", end =" stopmin ", status =" trcode ", process =" FALSE ")' – mCorey

+0

Bạn có thể đăng câu trả lời này làm câu trả lời và chấp nhận câu trả lời đúng không? –

Trả lời

4

Tôi đã cố gắng giải quyết vấn đề này bằng cách chuyển đổi thời gian thành phút (theo một câu hỏi khác trên stackoverflow), tạo mã trạng thái là ký tự (as.character), sử dụng seqformat và gán nó cho trục thời gian. Mã mới đọc:

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

Các vấn đề liên quan