Mat*_*att 3 statistics select r duplicates dataframe
好吧,我对 R 还很陌生,我尝试在文档中搜索我需要做的事情,但这就是问题所在。
我有一个名为 heeds.data 的 data.frame,格式如下(为简单起见,省略了一些列) eval.num、eval.count、...fitness、fitness.mean、green.h.0、green.v.0、偏移.0、绿色.h.1、绿色.v.1、...绿色.h.7、绿色.v.7、偏移.7...
我选择了满足以下条件的行:
best.fitness <- min(heeds.data$fitness.mean[heeds.data$eval.count >= 10])
best.row <- heeds.data[heeds.data$fitness.mean == best.fitness]
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是所有其他行的列 green.h.0 到 offset.7 (列的连续部分)等于 best.row
我想这可能有用
heeds.best <- heeds.data$fitness[
heeds.data$green.h.0 == best.row$green.h.0 & ...
]
Run Code Online (Sandbox Code Playgroud)
但对于 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
Run Code Online (Sandbox Code Playgroud)
应该选择“最佳”作为第 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
Run Code Online (Sandbox Code Playgroud)
数据实际上并未排序,并且还有更多列,但这就是概念
谢谢!
您的问题本质上只是一个复杂的索引问题。我这里有一个解决方案,尽管可能有更简单的解决方案。我将您的示例数据加载到DF:
首先,这为我们提供了最好的行索引(易于使用which.min()):
R> bind <- which.min(DF[,"fitness.mean"]) # index of best row
Run Code Online (Sandbox Code Playgroud)
接下来,我们apply()进行逐行比较(在我们关心的列子集上,这里仅按位置 5 到 7 进行索引)。
我们使用比较函数cmpfun将当前行r与最佳行(由 索引bind)进行比较,并用于all()获取所有元素对应的行。[我们需要drop=FALSE在这里使其双方具有可比性,否则会as.numeric()有所帮助。]
R> cmpfun <- function(r) all(r == DF[bind,5:7,drop=FALSE]) # compare to row bind
Run Code Online (Sandbox Code Playgroud)
我们简单地apply按行:
R> brows <- apply(DF[,5:7], 1, cmpfun)
Run Code Online (Sandbox Code Playgroud)
这些是我们想要的行:
R> DF[brows, ]
eval.num eval.count fitness fitness.mean green.h.0 green.v.0 offset.0
1 1 1 1500 1500 100 120 40
2 2 2 1000 1250 100 120 40
3 3 3 1250 1250 100 120 40
4 4 4 1000 1188 100 120 40
R>
Run Code Online (Sandbox Code Playgroud)
我们使用三列进行比较并不重要——重要的是我们有一个5:7针对我们想要的列的索引表达式(此处)。
| 归档时间: |
|
| 查看次数: |
4341 次 |
| 最近记录: |