РЕДАКТИРОВАТЬ
После повторного чтения вопроса, я думаю, мы можем использовать split
без order
ing, чтобы избежать этапа сортировки.Поскольку f1
и f2
уникальны для каждой строки, мы можем сделать
split(sample.df[, -(1:2)], list(sample.df$f1, sample.df$f2))
#$`1.1`
# x1 x2 x3
#2 6.3 9.56 3.74
#$`2.1`
# x1 x2 x3
#3 6.88 8.72 3.14
#$`1.2`
# x1 x2 x3
#4 6.68 9.58 3.84
#$`2.2`
# x1 x2 x3
#1 7.28 9.4 5.02
Оригинальный ответ
Я не совсем уверен вцель, но одним из способов является order
sample.df
на f1
, f2
, а затем подмножество с использованием Map
new_df <- sample.df[with(sample.df, order(f1, f2)),]
Map(function(x, y) new_df[with(new_df, f1 == x & f2 == y), -(1:2)],
new_df$f1, new_df$f2)
#[[1]]
# x1 x2 x3
#2 6.3 9.56 3.74
#[[2]]
# x1 x2 x3
#4 6.68 9.58 3.84
#[[3]]
# x1 x2 x3
#3 6.88 8.72 3.14
#[[4]]
# x1 x2 x3
#1 7.28 9.4 5.02
Если вышеуказанное значение является ожидаемым, то каждая строка в new_df
это выход, который вы хотите.Если вы хотите, чтобы они были в виде отдельного списка, мы также можем split
каждую строку
split(new_df[, -(1:2)], seq_len(nrow(new_df)))
, что даст вам тот же результат.