2013-01-13 290 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

相关问题