Хотя я думаю, что вы должны использовать split(X, X$id)
, как подсказывает @ zx8754, вот подход, использующий для l oop:
X <- read.table(text = " id sales age
1 100 32
2 40 27
3 694 34
4 500 41", header = TRUE)
ids <- unique(X[["id"]])
grps <- vector(mode = "list", length = length(ids))
for (id in ids) {
grps[[id]] = X[X$id == id, ]
}
grps
[[1]]
id sales age
1 1 100 32
[[2]]
id sales age
2 2 40 27
[[3]]
id sales age
3 3 694 34
[[4]]
id sales age
4 4 500 41
Или, если вам нужно количество раз в l oop, вы можете использовать:
for (i in seq_along(ids)) {
grps[[i]] = X[X$id == ids[i], ]
}
grps
Этот следующий шаг не рекомендуется, но он взял бы список и создал бы кучу объектов data.frame в среде:
names(grps) <- paste0("grps", seq_len(length(grps)))
list2env(grps, .GlobalEnv)