r - 为组中的每个行组合创建一个新数据集
问题描述
我正在尝试为来自不同组的每个行组合创建一个数据集。理想情况下,将从每组中选择一行,并且每个组合都有一个数据集。我有一个数据集,其结构类似于下面的示例:
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
推荐阅读
- javascript - Rxjs - 收集所有未处理的值
- asp.net-core - ASP.NET Core 应用程序中的 AAD 身份验证未返回正确的标头
- javascript - 仅当用户是人类(reCaptcha v3)时,如何加载和插入一些 HTML?
- python - xlwings 和 ipython 并排 - 如何以交互方式使用 XLWINGS 从 EXCEL 文件执行 jupyter notebook?
- python - 如何检查数组列表中的数组 - Python
- ios - 使用三元运算符设置 UIButton 图像
- mysql - 在准备好的语句中将布尔值与 json 进行比较
- java - Jackson + YAML for Not A Number (.NAN)
- vuejs3 - Tradingview 小部件添加价格线
- open-source - OpenSearch 安装 | 安全管理员.sh | UnavailableShardsException[[.opendistro_security][0] 主分片未激活超时