Цикл для подмножества данных по меткам времени на минутной шкале в R - PullRequest
0 голосов
/ 29 мая 2018

У меня есть большой фрейм данных, который я пытаюсь подразделить на меньшие фреймы данных по временным меткам, вплоть до минутной шкалы.Допустим, у нас есть следующий фиктивный набор данных:

> mydata
           date id
1 3/29/17 18:16  A
2 3/30/17 18:05  B
3 3/30/17 18:16  C
4 3/30/17 18:16  D

Я хочу запустить цикл для сортировки и создания мини-фреймов данных по их отметке времени в масштабе минут, например:

> mydata1
           date id
2 3/29/17 18:16  B

>mydata2
           date id
4 3/30/17 18:05  D

> mydata3
           date id
5 3/30/17 18:16  E
6 3/30/17 18:16  F

(Я планирую объединить кадры данных позже, чтобы присутствовали все идентификаторы)

Что наиболее эффективно для этого нужно сделать в R?Заранее спасибо за любую помощь!

1 Ответ

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

Один из вариантов - использовать функцию split и разделить ваш data.frame на основе столбца date.Поскольку столбец date в вашем data.frame является точным с точностью до минуты, следовательно, split будет работать.Он вернет список фреймов данных.

listDfs <- split(mydata, mydata$date)
listDfs
# $`3/29/17 18:16`
# date id
# 1 3/29/17 18:16  A
# 
# $`3/30/17 18:05`
# date id
# 2 3/30/17 18:05  B
# 
# $`3/30/17 18:16`
# date id
# 3 3/30/17 18:16  C
# 4 3/30/17 18:16  D

Другой вариант (я скажу, предпочтительный вариант ) - группировать по date и соответствующим образом упорядочивать данные.Вы можете добавить столбец для номера фрейма данных (если это поможет).dplyr::group_indices может использоваться для указания уникального номера для каждой группы.Решение с использованием dplyr и lubridate:

library(dplyr)
library(lubridate)

mydata %>% mutate(date = mdy_hm(date)) %>%
  mutate(df_num = group_indices(., date)) %>%
  group_by(df_num) %>%
  select(df_num, date, id)

# # A tibble: 4 x 3
# # Groups: df_num [3]
# df_num date                id   
# <int> <dttm>              <chr>
# 1      1 2017-03-29 18:16:00 A    
# 2      2 2017-03-30 18:05:00 B    
# 3      3 2017-03-30 18:16:00 C    
# 4      3 2017-03-30 18:16:00 D 

Данные:

mydata <- read.table(text = 
"date id
1 '3/29/17 18:16'  A
2 '3/30/17 18:05'  B
3 '3/30/17 18:16'  C
4 '3/30/17 18:16'  D",
header = TRUE, stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...