r - 数据框中的组合行(2行)总和没有重复
问题描述
有必要通过从每一行添加每一行(不重复的组合)并将结果写入新的数据帧来“增加”数据帧。与原始数据框相比,结果是大量的行,所以我想不使用循环,例如使用 apply 来决定。数据框例如:
1 3 6
2 2 4
5 1 2
6 4 1
结果应该是:
1 3 6
2 2 4
5 1 2
6 4 1
3 5 10
6 4 8
7 7 7
7 3 6
8 6 5
11 5 3
解决方案
我们可以使用combn
和生成一次取 2 的行号组合,添加一个自定义函数来添加这些行并将它们与原始数据框绑定。
rbind(df, do.call("rbind",
combn(1:nrow(df), 2, function(x) df[x[1], ] + df[x[2], ], simplify = FALSE)))
# V1 V2 V3
#1 1 3 6
#2 2 2 4
#3 5 1 2
#4 6 4 1
#11 3 5 10
#23 6 4 8
#32 7 7 7
#21 7 3 6
#22 8 6 5
#31 11 5 3
仅供参考,这里的关键部分是
combn(1:nrow(df), 2) #which gives
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 1 1 2 2 3
#[2,] 2 3 4 3 4 4
并且此输入用于从原始数据框中子集行。
推荐阅读
- excel - MDX 从 Excel 2010/Excel 365 (16.0.11328.20363) 更改行为
- python - 如何在 Python 中使用 break 语句退出嵌套的 for 循环
- vue.js - 如何在 Vue 中全局导入我自己的类或方法?
- node.js - Twilio - 了解呼出电话是否由接收者转移
- idris - 为什么 Idris 给我以下代码的类型不匹配错误?
- python-3.x - 使用 SSH 在多个 EC2 实例上运行 dispynode.py 似乎可行,但实际上并没有
- apache-spark - 有没有办法在数据帧级别优化 dataframe.writer.partitionBy ?
- coding-style - 干净的架构——在哪里放置输入验证逻辑?
- angular - 将输入值添加到Angular中的动态
- tcl - 为什么文件名没有正确呈现