R- Попытка получить разницу во времени между каждой строкой (последовательное местоположение)? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть этот фрейм данных (он не позволяет мне показать картинку здесь). Я пытаюсь получить разницу во времени между каждым последовательным местоположением, сгруппированным по имени компонента. Итак, в основном, я хочу посмотреть, сколько времени занимает каждый компонент в определенном месте, а затем узнать среднее время, затрачиваемое любым компонентом на местоположение, а затем по местоположению и типу компонента. Первоначально я пытался распространить данные таким образом, чтобы местоположение было ключевым, а затем умножило значение, а затем получило разницу между столбцами, но каждый тип компонента имеет разные местоположения, поэтому он не работал.

comps <- structure(list(component_name = c("COMPONENT000000001", 
    "COMPONENT000000001", 
"COMPONENT000000001", "COMPONENT000000001", "COMPONENT000000001", 
"COMPONENT000000001", "COMPONENT000000002", "COMPONENT000000002", 
"COMPONENT000000002", "COMPONENT000000002", "COMPONENT000000002", 
"COMPONENT000000002", "COMPONENT000000002"), component_type = 
    structure(c(4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("component_0", 
"component_1", "component_2", "component_3"), class = "factor"), 
    location = structure(c(6L, 2L, 14L, 1L, 1L, 4L, 6L, 2L, 14L, 
    14L, 1L, 1L, 4L), .Label = c("29MSJ_03_01", "5YU1V_01_02", 
    "7EFLP_03_02", "assembly room", "B57X3_03_00", "GH9CV_00_03", 
    "HUX1L_02_02", "JX3UO_01_01", "MRX5B_01_00", "TG6IA_00_02", 
    "VUFVH_00_00", "YBSFJ_00_01", "ZAENM_02_01", "ZZU3X_02_00"
    ), class = "factor"), times = structure(c(1514764800, 1514771683, 
    1514784872, 1514794911, 1514806504, 1514820010, 1514764800, 
    1514776184, 1514789862, 1514794911, 1514806046, 1514831050, 
    1514843151), class = c("POSIXct", "POSIXt"), tzone = "America/New_York")), .Names = c("component_name", 
"component_type", "location", "times"), row.names = c(NA, 13L
), class = "data.frame")



loc_diff <- comps %>%
          group_by(., type, location) %>%
          mutate(., diff = as.numeric(difftime(max(times), min(times))))
ld <- loc_diff %>%
      group_by(., location) %>%
      summarise(., avg = mean(diff))

Это было первоначально то, что я пытался сделать, но потом он дал мне информационный кадр со всеми средними значениями примерно одинаковыми, и я не думаю, что это правильно, основываясь на других исследованиях, которые я сделал. Любая помощь очень ценится. Спасибо!

P.S. Я не уверен, должен ли я делать tsa на этом, но я новичок в этом, и я все еще пытаюсь заставить это работать.

1 Ответ

0 голосов
/ 09 мая 2018

Сначала можно рассчитать время, затрачиваемое на каждое местоположение по компоненту, сгруппировав по component_name, а затем взяв разницу между times следующей строки и текущей строки. Можно использовать difftime, чтобы найти разницу между двумя значениями (в секундах).

library(dplyr)
library(tidyr)
library(lubridate)

#First get the time spend by each component at a location
comps_timesSpendAtLocatoin <- comps %>%
  group_by(component_name) %>%
  mutate(timeSpendAtLocation = difftime(lead(times),times, units = "secs"))

#Group_by 'component_name' to find average time spend on a location by each component
comps_timesSpendAtLocatoin %>% group_by(component_name) %>%
  summarise(avgTimeComponentAtLocation = mean(timeSpendAtLocation, na.rm = TRUE))
# component_name     avgTimeComponentAtLocation
# <chr>              <time>                    
# 1 COMPONENT000000001 11042                     
# 2 COMPONENT000000002 13058.5 

#Average time spend on a location by component_type and location  
comps_timesSpendAtLocatoin %>% group_by(component_type, location) %>%
  summarise(avgTimeComponentTypeAtLocation = mean(timeSpendAtLocation, na.rm = TRUE))

# # A tibble: 5 x 3
# # Groups: component_type [?]
# component_type location      avgTimeComponentTypeAtLocation
# <fctr>         <fctr>        <time>                        
# 1 component_3    29MSJ_03_01   15551                         
# 2 component_3    5YU1V_01_02   13433.5                       
# 3 component_3    assembly room NaN                           
# 4 component_3    GH9CV_00_03   9133.5                        
# 5 component_3    ZZU3X_02_00   8741  
...