r - 在 R 中按 3 列将数据框拆分为所有可能的数据框组合
问题描述
我需要从原始数据帧拆分为所有可能的 3 列组合接收所有可能的数据帧。并且所有数据框都必须包含 id 列。我处于死胡同,不知道如何保存所有可能的数据帧,以便可以进一步使用它们。其中一个想法是将它们保存到列表中。但我仍然不知道如何将所有必要的列绑定在一起。我发现了一个与我很接近的问题,但它仍然非常不同。此外原始数据框有超过 100 万行和大约 20 列,因此使用 data.table 是合理的。
frame <- data.frame(id = letters[seq( from = 1, to = 10 )],
a = rnorm(10, 4), b = rnorm(10, 6), c=rnorm(10, 5),
d = rnorm(10, 2))
combos <- data.table(combn(colnames(frame[,-1]), 3))
combos <- data.table(t(rbind(combos, t(rep(colnames(output2[,1]), ncol(combos))))))
names(combos) <- c('category_1', 'category_2', 'category_3', 'id')
list_tables <- apply(combos, 1, as.list)
伙计们,我将不胜感激。提前致谢
解决方案
请查看对您的 OP 重新样本数据和预期输出的评论。除此之外,也许你可以做这样的事情?
lapply(as.data.frame(combn(ncol(frame) - 1, 3)), function(idx)
frame[, c(1, idx + 1)])
#$V1
# id a b c
#1 a 5.434201 6.342768 5.140709
#2 b 3.922708 7.572425 4.147767
#3 c 4.739137 5.253265 6.903397
#4 d 2.241395 6.306650 3.351814
#5 e 3.930175 4.569514 5.759625
#6 f 4.451906 7.194427 5.062291
#7 g 2.041634 5.517932 4.610969
#8 h 3.998476 7.317862 5.636666
#9 i 3.734664 4.870168 4.132215
#10 j 5.563223 5.073649 5.098734
#
#$V2
# id a b d
#1 a 5.434201 6.342768 1.3168256
#2 b 3.922708 7.572425 2.2410894
#3 c 4.739137 5.253265 2.5894319
#4 d 2.241395 6.306650 1.0693751
#5 e 3.930175 4.569514 2.2974619
#6 f 4.451906 7.194427 5.1372771
#7 g 2.041634 5.517932 0.9724653
#8 h 3.998476 7.317862 3.9418028
#9 i 3.734664 4.870168 1.7220438
#10 j 5.563223 5.073649 1.7784112
#
#$V3
# id a c d
#1 a 5.434201 5.140709 1.3168256
#2 b 3.922708 4.147767 2.2410894
#3 c 4.739137 6.903397 2.5894319
#4 d 2.241395 3.351814 1.0693751
#5 e 3.930175 5.759625 2.2974619
#6 f 4.451906 5.062291 5.1372771
#7 g 2.041634 4.610969 0.9724653
#8 h 3.998476 5.636666 3.9418028
#9 i 3.734664 4.132215 1.7220438
#10 j 5.563223 5.098734 1.7784112
#
#$V4
# id b c d
#1 a 6.342768 5.140709 1.3168256
#2 b 7.572425 4.147767 2.2410894
#3 c 5.253265 6.903397 2.5894319
#4 d 6.306650 3.351814 1.0693751
#5 e 4.569514 5.759625 2.2974619
#6 f 7.194427 5.062291 5.1372771
#7 g 5.517932 4.610969 0.9724653
#8 h 7.317862 5.636666 3.9418028
#9 i 4.870168 4.132215 1.7220438
#10 j 5.073649 5.098734 1.7784112
样本数据
set.seed(2017);
frame <- data.frame(id = letters[seq( from = 1, to = 10 )],
a = rnorm(10, 4), b = rnorm(10, 6), c=rnorm(10, 5),
d = rnorm(10, 2))
最好在提供随机样本数据时始终使用固定种子。
推荐阅读
- java - 两个没有oid的对象在所有级别的比较
- javascript - 如何检查到 UNIX 时间戳之间是否有时间变化
- c# - 仅通过更新聚合根插入实体时出错
- arrays - 在 Swift 中获取两个不同数组中匹配的值
- python - RuntimeError: Expected hidden[0] size (2, 1, 512), got [2, 128, 512] - Seq2Seq Model with PreTrained BERT Model
- python - python中具有条件返回的功能样式
- python - 在一张图中使用 2 个 Y 轴
- postgresql - Postgres 数据库未执行创建表语句
- rabbitmq - RabbitMQ 我可以用 Promises 构建一个 RPC 系统吗?
- angular - How to export Angular Table to csv in Angular 10