#r #merge
Вопрос:
Я ищу решение в R для объединения пар строк в одну.
Задача | Время начала | Время окончания |
---|---|---|
Программирование | 13:35 | 13:50 |
Программирование | 14:00 | 15:40 |
Производство | 15:45 | 16:00 |
Проверка качества | 16:15 | 16:30 |
Проверка качества | 16:45 | 17:00 |
library(tidyverse)
df <- data.frame('Task' = c('Promgramming', 'Programming', 'Production', 'QualityInspection', 'QualityInspection'),
'Starttime' = c('13:35', '14:00', '15:45', '16:15', '16:45'),
'Endtime' = c('13:50', '15:40', '16:00', '16:30', '17:00'))
Моя желаемая таблица выглядит следующим образом:
Задача | Время начала | Время окончания |
---|---|---|
Программирование | 13:35 | 15:40 |
Производство | 15:45 | 16:00 |
Проверка качества | 16:15 | 17:00 |
Задания всегда выполняются парами по два или по одному.
Как я могу этого достичь?
Ответ №1:
Для каждого Task
вы можете извлечь первое Starttime
и последнее EndTime
.
library(dplyr)
df %>%
group_by(Task) %>%
summarise(Starttime = first(Starttime),
Endtime = last(Endtime))
# Task Starttime Endtime
# <chr> <chr> <chr>
#1 Production 15:45 16:00
#2 Programming 13:35 15:40
#3 QualityInspection 16:15 17:00
данные
df <- structure(list(Task = c("Programming", "Programming", "Production",
"QualityInspection", "QualityInspection"), Starttime = c("13:35",
"14:00", "15:45", "16:15", "16:45"), Endtime = c("13:50", "15:40",
"16:00", "16:30", "17:00")), class = "data.frame", row.names = c(NA, -5L))
Комментарии:
1. или, может быть, время начала = мин(время начала) и время окончания = макс(время окончания) ?
2. @Billy34 Это не сработало бы, потому что, если только задающий вопрос не говорит нам, времена-это векторы символов. Они не были бы упорядочены хронологически.
Ответ №2:
С помощью data.table
library(data.table)
setDT(df)[, .(Starttime = first(Starttime), Endtime = last(Endtime)), Task]