对于每列,计算它与其他列的最大值之间的差异

dai*_*ish 3 r

假设我有一个数据帧:

x <- data.frame(a=c(1,2,3), b=c(2,3,2), c=c(4,5,1))
#  a b c
#1 1 2 4
#2 2 3 5
#3 3 2 1
Run Code Online (Sandbox Code Playgroud)

对于每一列,我想计算它与其他列的最大值之间的差异:

# Desired result:
#    a   b   c
#1  -3  -2   2
#2  -3  -2   2
#3   1  -1  -2
Run Code Online (Sandbox Code Playgroud)

例如,对于(1,1)条目,它是1,因为对于第一行a = 1,和max(b,c) = 4,所以1 - 4 = -3.

请注意,我不一定知道前面数据框中的列数,因此可能会有任意多列.

Chr*_*olk 6

这应该适用于任意数量的列:

sapply(1:ncol(x), function (i) {
  x[,i] - do.call(pmax, x[,-i])
})
Run Code Online (Sandbox Code Playgroud)