My data looks like this:
Subject Trial Task Time Fixation
..
1 1 2 1 0.335
1 1 2 456 NA
1 1 2 765 0.165
1 1 2 967 0.445
..
2 3 1 1 0.665
2 3 1 300 0.556
2 3 1 570 NA
2 3 1 900 NA
..
15 5 3 1 0.766
15 5 3 567 0.254
15 5 3 765 0.167
15 5 3 1465 NA
..
I want to create a column FixationID where I want to rank every Fixation per Trial according to Time column (1,2,3,4..). Time column shows time course in milliseconds for every trial and every Trial starts with 1. Trials have different lengths.
I want my data to look like this:
Subject Trial Task Time Fixation FixationID
..
1 1 2 1 0.335 1
1 1 2 456 NA NA
1 1 2 765 0.165 2
1 1 2 967 0.445 3
..
2 3 1 1 0.665 1
2 3 1 300 0.556 2
2 3 1 570 NA NA
2 3 1 900 NA NA
..
15 5 3 1 0.766 1
15 5 3 567 0.254 2
15 5 3 765 0.167 3
15 5 3 1465 NA NA
..
I tried
library(data.table)
setDT(mydata)[!is.na(Fixation), FixID :=
seq_len(.N)[order(Time)], by = Trial]
but what I get is ranking 1,16,31,45,57.. for my Subject 1 Trial 1. I want 1,2,3,4,5..
Can anyone help me with this?
Excerpt from my data:
structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), Trial = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L), Task = c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), Time = c(1L, 385L, 571L, 638L, 951L,
1020L, 1349L, 1401L, 1661L, 1706L, 2042L, 2067L, 2322L, 2375L,
2540L, 2660L, 2686L, 3108L, 3172L, 3423L, 3462L, 3845L, 3870L,
3969L, 4099L, 4132L, 1L, 471L, 513L, 697L), Fixation = c(0.383,
0.185, NA, 0.312, NA, 0.328, NA, 0.259, NA, 0.335, NA, 0.254,
NA, 0.164, 0.119, NA, 0.421, NA, 0.25, NA, 0.382, NA, 0.0979999999999999,
0.129, NA, 0.335, 0.469, NA, 0.183, NA)), .Names = c("Subject",
"Trial", "Task", "Time", "Fixation"), row.names = c(NA, 30L), class = "data.frame")