2013-10-23 56 views
1

我有一个数据框3列,
我想将2列与更大的值合并成一个与总和。
无法合并时,函数应该抛出错误。 (例如:当有一个较小的值0.3,0.3,0.4领带)根据值合并列

|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个相同的最低值

回答

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

也许像th是会让你开始:

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 

你需要添加你的其他条件虽然。