假设我有一个数据框:
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 = 1
和max(b,c) = 4
,所以1 - 4 = -3
。
请注意,我不一定知道前面数据框中的列数,因此可能会有任意多列。
答案 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]))