我试图为来自不同组的行的每个组合创建一个数据集。理想的情况是,从每组中选择一行,然后为每个组合建立一个数据集。我有一个数据集,其结构类似于下面的示例。
Name Group Stat1 Stat2
1 1 a 63 38
2 2 a 33 62
3 3 b 3 66
4 4 b 57 67
5 5 c 42 69
6 6 c 47 14
7 7 c 16 10
8 8 d 21 46
9 9 d 72 1
试图让第一个数据集的最终结果看起来像这样。
Name Group Stat1 Stat2
1 1 a 63 38
2 3 b 3 66
3 5 c 42 69
4 8 d 21 46
第二个数据集看起来是这样的:
Name Group Stat1 Stat2
1 1 a 63 38
2 3 b 3 66
3 5 c 42 69
4 9 d 72 1
直到所有的组合都被用完 我尝试过使用应用函数和 combn
但似乎不能得到我想要的结果。在我看来,这在概念上并没有太大的挑战性,所以我不知道我缺少什么。
任何帮助将是非常感激的! 先谢谢你
有很多方法可以解决这个问题。一个简单的解决方案是只生成所有4行组合,然后子集到那些与所有不同的数据集。Group
值。我把你的数据命名为 df
并假定 Name
将是唯一的行id。如果不是这样的话,你可以用下面的方法来代替 df$Name
与 1:nrow(df)
# All 4 row combos of row ids
combs <- combn(df$Name, 4)
# Match group labels to row ids
g <- matrix(df$Group[combs], nrow = 4)
# 4 row combs filtered to all distinct group vals
combs <- combs[,apply(g, 2, function(i) all(!duplicated(i)))]
# For each 4 row combo, extract rows from the dataframe
final_list <- apply(combs, 2, function(i) df[i,])
final_list[1:3]
[[1]]
Name Group Stat1 Stat2
1 1 a 63 38
3 3 b 3 66
5 5 c 42 69
8 8 d 21 46
[[2]]
Name Group Stat1 Stat2
1 1 a 63 38
3 3 b 3 66
5 5 c 42 69
9 9 d 72 1
[[3]]
Name Group Stat1 Stat2
1 1 a 63 38
3 3 b 3 66
6 6 c 47 14
8 8 d 21 46