好吧,我对R还是个新手,我试着搜索文档来寻找我需要做的事情,但是这里有个问题。
我有一个名为www.example.com的数据框架heeds.data,格式如下(为简单起见,省略了一些列):eval.num,eval.count,...... fitness,fitness.mean,green.h.0,green.v.0,offset.0,green.h.1,green.v.1,...... green.h.7,green.v.7,offset.7......
我选择了符合以下条件的行:
best.fitness <- min(heeds.data$fitness.mean[heeds.data$eval.count >= 10])
best.row <- heeds.data[heeds.data$fitness.mean == best.fitness]
现在,我需要的是所有其他行,其中列green.h.0到offset.7(列的连续部分)等于最佳.row
我在想这可能有用
heeds.best <- heeds.data$fitness[
heeds.data$green.h.0 == best.row$green.h.0 & ...
]
但是有24列,这似乎是一个愚蠢的方法。寻找一些简单一点,手动打字少的东西。
下面是一个简短的数据示例,以显示所需内容
eval.num, eval.count, fitness, fitness.mean, green.h.0, green.v.0, offset.0
1 1 1500 1500 100 120 40
2 2 1000 1250 100 120 40
3 3 1250 1250 100 120 40
4 4 1000 1187.5 100 120 40
5 1 2000 2000 200 100 40
6 1 3000 3000 150 90 10
7 1 2000 2000 90 90 100
8 2 1800 1900 90 90 100
应该选择“最佳”作为第4行,然后我想获取如下结果
eval.num, eval.count, fitness, fitness.mean, green.h.0, green.v.0, offset.0
1 1 1500 1500 100 120 40
2 2 1000 1250 100 120 40
3 3 1250 1250 100 120 40
4 4 1000 1187.5 100 120 40
数据实际上并没有排序,而且还有很多列,但这就是概念
谢谢!
2条答案
按热度按时间wydwbb8l1#
你的问题本质上 * 只是 * 一个复杂的索引问题。我这里有一个解决方案,虽然可能有更简单的。我加载了您的示例数据到
DF
:首先,这会得到最佳的行索引(使用
which.min()
很容易):接下来,我们执行一个逐行比较(在我们所关心的列的子集上,这里只按位置5到7进行索引)。
我们使用比较函数
cmpfun
将当前行r
与最佳行(索引为bind
)进行比较,并使用all()
获取所有元素都对应的行[这里我们需要drop=FALSE
以使其在两侧都具有可比性,否则as.numeric()
会有帮助]。我们简单地按行
apply
:这些是我们想要的行:
使用三列进行比较并不重要--重要的是我们需要一个索引表达式(这里是
5:7
)来表示所需的列。mspsb9vt2#
这是一个展示
merge
是一个强大R函数的机会。使用这些数据:
我们计算如下:
给予