根据值合并列

时间:2013-10-23 04:58:56

标签: r

我有一个包含3列的数据框,
我想将具有较大值的2列合并为具有总和的一列。
只要无法合并,函数就会抛出错误。 (例如:在较小的值0.3,0.3,0.4 上存在平局时)

E.g

|A|     |B|     |C|
0.5     0.3     0.2
0.1     0.7     0.2
0.4     0.4     0.2

结果数据框:

|X|     |Y|
0.8     0.2  #(x=0.5 + 0.3)
0.9     0.1  #(x=0.7 + 0.2)
0.8     0.2  #(x=0.4 + 0.4)

提前感谢您的帮助

更新
如果有人遇到同样的问题,我使用了:

apply(dt, 1, function(x) which(x==min(x)))

查找数据框中是否有2个相同的最小值

2 个答案:

答案 0 :(得分:3)

dt$something <- dt$A + dt$B + dt$C - pmin(dt$A,dt$B,dt$C) 

使用data.table

可以更轻松地处理您的额外情况
dt <- data.table(dt)
dt[,something := A + B + C - pmin(A,B,C) ]
dt[A==B | B ==C | C==A,something := NA]

答案 1 :(得分:1)

也许这样的事情会让你开始:

t(apply(mydf, 1, function(x) {a <- sort(x); c(sum(a[2:3]), a[1])}))
#      [,1] [,2]
# [1,]  0.8  0.2
# [2,]  0.9  0.1
# [3,]  0.8  0.2

但您需要添加其他条件。