2013-10-23 55 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 

你需要添加你的其他條件雖然。