Я работаю над переменной время / дата и пытаюсь оценить время, затраченное на каждую запись. Я следую за двумя шагами для этого анализа. (a)
изменить переменные в нужном формате (b)
рассчитать время, затраченное на каждый вопрос. Вот как выглядит мой набор данных:
id <- c(1,1,1,1,1, 2,2,2,2,2)
item.id <- c(1,2,3,4,5, 1,2,3,4,5)
submit.time <-c("2019-04-09 09:50:30.340","2019-04-09 09:52:12.440","2019-04-09 09:52:15.787","2019-04-09 09:53:21.587","2019-04-09 09:53:49.047",
"2019-04-09 09:49:45.243","2019-04-09 09:52:53.663","2019-04-09 09:53:23.293","2019-04-09 09:54:00.727","2019-04-09 09:54:52.400")
start.time <- c("04/09/2019 09:50:02.317 AM","04/09/2019 09:50:02.317 AM","04/09/2019 09:50:02.317 AM","04/09/2019 09:50:02.317 AM","04/09/2019 09:50:02.317 AM",
"04/09/2019 09:47:42.583 AM","04/09/2019 09:47:42.583 AM","04/09/2019 09:47:42.583 AM","04/09/2019 09:47:42.583 AM","04/09/2019 09:47:42.583 AM")
data <- data.frame(id, item.id,start.time, submit.time)
> data
id item.id start.time submit.time
1 1 1 04/09/2019 09:50:02.317 AM 2019-04-09 09:50:30.340
2 1 2 04/09/2019 09:50:02.317 AM 2019-04-09 09:52:12.440
3 1 3 04/09/2019 09:50:02.317 AM 2019-04-09 09:52:15.787
4 1 4 04/09/2019 09:50:02.317 AM 2019-04-09 09:53:21.587
5 1 5 04/09/2019 09:50:02.317 AM 2019-04-09 09:53:49.047
6 2 1 04/09/2019 09:47:42.583 AM 2019-04-09 09:49:45.243
7 2 2 04/09/2019 09:47:42.583 AM 2019-04-09 09:52:53.663
8 2 3 04/09/2019 09:47:42.583 AM 2019-04-09 09:53:23.293
9 2 4 04/09/2019 09:47:42.583 AM 2019-04-09 09:54:00.727
10 2 5 04/09/2019 09:47:42.583 AM 2019-04-09 09:54:52.400
id
для каждого студента, item.id
- идентификатор вопроса, start.time
- время входа на экзамен (уникальное время для каждого студента). ), а submit.time
- это время, когда студент представляет ответ на каждый вопрос.
(a)
редактирование данных: этот шаг включает удаление AM|PM
и переключение порядка start.time
, потому что я хотел бы использовать формат submit.time
и отредактированный формат start.time
,
data$start.time <- gsub(" AM| PM", "", data$start.time) # exclude AM or PM
data$start.time <- gsub("/", "-", data$start.time) #replace / with -
dtparts = t(as.data.frame(strsplit(data$start.time,' '))) # split date and time
row.names(dtparts) = NULL
data$newdate <- strptime(as.character(dtparts[,1]), "%m-%d-%Y") # switch the date order
data$newdate <- as.POSIXct(data$newdate) # R was complaining about the time format-had to change here
data$start.time <- paste0(data$newdate," ",dtparts[,2]) # bring the time back
Теперь переменные с двумя временными характеристиками выглядят одинаково. Я преобразовал эти даты и время в секунды.
data %>%
mutate(start.time.num = as.numeric(as.POSIXct(start.time), units="secs")) %>%
mutate(submit.time.num = as.numeric(as.POSIXct(submit.time), units="secs"))
id item.id start.time submit.time newdate start.time.num submit.time.num
1 1 1 2019-04-09 09:50:02.317 2019-04-09 09:50:30.340 2019-04-09 1554817802 1554817830
2 1 2 2019-04-09 09:50:02.317 2019-04-09 09:52:12.440 2019-04-09 1554817802 1554817932
3 1 3 2019-04-09 09:50:02.317 2019-04-09 09:52:15.787 2019-04-09 1554817802 1554817936
4 1 4 2019-04-09 09:50:02.317 2019-04-09 09:53:21.587 2019-04-09 1554817802 1554818002
5 1 5 2019-04-09 09:50:02.317 2019-04-09 09:53:49.047 2019-04-09 1554817802 1554818029
6 2 1 2019-04-09 09:47:42.583 2019-04-09 09:49:45.243 2019-04-09 1554817663 1554817785
7 2 2 2019-04-09 09:47:42.583 2019-04-09 09:52:53.663 2019-04-09 1554817663 1554817974
8 2 3 2019-04-09 09:47:42.583 2019-04-09 09:53:23.293 2019-04-09 1554817663 1554818003
9 2 4 2019-04-09 09:47:42.583 2019-04-09 09:54:00.727 2019-04-09 1554817663 1554818041
10 2 5 2019-04-09 09:47:42.583 2019-04-09 09:54:52.400 2019-04-09 1554817663 1554818092
(b)
На этом шаге я хотел бы рассчитать время, затраченное на каждый вопрос здесь. Для первого вопроса первого студента время должно быть submit.time.num(1554817830) - start.time.num(1554817802)=28
. Для второго вопроса первого ученика время должно быть submit.time.num(1554817932)
-
предыдущее submit.time.num(1554817830)=102
. Эту процедуру необходимо повторить для каждого студента. Когда он попадает ко второму студенту, он должен снова взять start.time
для первого ряда второго студента.
Итак, дополнительный столбец должен выглядеть следующим образом:
> time.spent
time.spent
1 28
2 102
3 4
4 66
5 27
6 122
7 189
8 29
9 38
10 51
Я прошу прощения за публикацию так долго, если у вас также есть какие-либо предложения для первой части, пожалуйста, дайте мне знать, что более важно Любые предложения по части (b)
?
Спасибо