首页 > 解决方案 > R:找到列之间的最小差异并返回平均值

问题描述

假设我有一个数据集:

ID  resid1  resid2  resid3
A   0,5      0,2    -0,2
B   0,1     -0,3     0,2
C   0,4     -0,1     0,1
D   0,3        0     0,2
E   0,1      0,6    -0,8

我想找到值差异最小的两列,然后在单独的对象中返回这两列的平均值。结果应该是这样的:

ID  mean
A   0,35
B   0,15
C   0
D   0,25
E   0,35

非常感谢任何协助。我只是不知道该怎么做(尽管我确信有几种简单的方法可以解决这个问题)。

标签: rdplyr

解决方案


这是一个基本的 R 解决方案

dfout <- cbind(
    df[1],
    mean = apply(df[-1], 1, function(v) {
        vs <- sort(v)
        ind <- which.min(diff(vs))
        mean(vs[ind + 0:1])
    })
)

这使

> dfout
  ID mean
1  A 0.35
2  B 0.15
3  C 0.00
4  D 0.25
5  E 0.35

数据

> dput(df)
structure(list(ID = c("A", "B", "C", "D", "E"), resid1 = c(0.5, 
0.1, 0.4, 0.3, 0.1), resid2 = c(0.2, -0.3, -0.1, 0, 0.6), resid3 = c(-0.2, 
0.2, 0.1, 0.2, -0.8)), row.names = c(NA, -5L), class = "data.frame")

推荐阅读