Это берет каждую i -ю строку идентификаторов и перечисляет их в фреймы данных.
res <- lapply(unique(dat$Client.id), function(i)
do.call(rbind, by(dat, dat$Client.id, function(x) x[i, ])))
res
# [[1]]
# Client.id Session.id Date
# 1 1 95738 13-03-2019
# 2 2 91298 13-02-2019
# 3 3 90138 03-02-2019
#
# [[2]]
# Client.id Session.id Date
# 1 1 61718 18-03-2019
# 2 2 12794 15-02-2019
# 3 3 23128 06-02-2019
#
# [[3]]
# Client.id Session.id Date
# 1 1 81289 19-03-2019
# 2 2 10083 16-02-2019
# 3 NA NA <NA>
Изменить: Чтобы «распаковать» перечисленные фреймы данных, используйте list2env
после, используйте setNames
, чтобы дать желаемые имена.
list2env(setNames(res, paste0("dat", 1:length(res))), envir=.GlobalEnv)
ls()
# [1] "dat" "dat1" "dat2" "dat3" "res"
Данные:
dat <- structure(list(Client.id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L), Session.id = c(95738L, 61718L, 81289L, 89239L, 91298L, 12794L,
10083L, 90138L, 23128L), Date = c("13-03-2019", "18-03-2019",
"19-03-2019", "20-03-2019", "13-02-2019", "15-02-2019", "16-02-2019",
"03-02-2019", "06-02-2019")), class = "data.frame", row.names = c(NA,
-9L))