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

时间:2017-08-31 00:01:46

标签: 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

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

# Desired result:
#    a   b   c
#1  -3  -2   2
#2  -3  -2   2
#3   1  -1  -2

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

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

2 个答案:

答案 0 :(得分:6)

这适用于任意数量的列:

sapply(1:ncol(x), function (i) {
  x[,i] - do.call(pmax, x[,-i])
})

答案 1 :(得分:0)

如果您想要一个带有一点RC索引的dplyr解决方案,您可以使用transmute生成新数据框,或mutate添加到现有数据框。

x <- data.frame(a=c(1,2,3), b=c(2,3,2), c=c(4,5,1))
x %>% transmute(a = a-max(x[,-1]),
                b = b-max(x[,-2]),
                c = c-max(x[,-3]))