Один из вариантов - использовать функцию 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)