2013-01-13 286 views
3

比方說,你有銀行帳戶信息:R:操縱基於另一列一個數據幀列的值

a=data.frame(Transaction=c(1,2,6,3,8,3,5.25,6.99,2,5),type=c("CREDIT","DEBIT","DEBIT","DEBIT","DEBIT","CREDIT","CREDIT","CREDIT","DEBIT","CREDIT")) 

與行,包括在第一列以及是否拍攝或添加到一個金額帳戶。我想根據第二行操作第一行,如果它是信用保持積極的,但是如果它是借方則否定它。到目前爲止,我想出最好的是:

a$Transaction[a$type=="DEBIT"]=-a$Transaction 

我要尋找一個簡單的,非循環的解決方案,因爲我相信,這樣的解決方案在R.由於存在着,夥計們!

回答

3
a[a$type=="DEBIT",]$Transaction <- -a[a$type=="DEBIT",]$Transaction 

是你在找什麼。您需要使用逗號來指定您使用數據框行的事實。

+0

這逗號是我過的最麻煩的通過我的所有試驗和錯誤的 - 非常感謝! – helasraizam

4

我喜歡做這個步驟,並創建一個索引矢量:

R> ind <- a[,"type"] == "CREDIT" 
R> ind 
[1] TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE 
R> a[ind, "Transaction"] <- - a[ind, "Transaction"] 
R> a 
    Transaction type 
1  -1.00 CREDIT 
2   2.00 DEBIT 
3   6.00 DEBIT 
4   3.00 DEBIT 
5   8.00 DEBIT 
6  -3.00 CREDIT 
7  -5.25 CREDIT 
8  -6.99 CREDIT 
9   2.00 DEBIT 
10  -5.00 CREDIT 
R> 
+0

謝謝你爲我鋪設! – helasraizam

相關問題