3

假设您有银行账户信息:

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 中存在这样的解决方案。谢谢,伙计们!

4

2 回答 2

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> 
于 2013-01-13T00:44:14.480 回答
3
a[a$type=="DEBIT",]$Transaction <- -a[a$type=="DEBIT",]$Transaction

是你要找的。您需要逗号来指定您正在使用数据框的行这一事实。

于 2013-01-13T00:43:12.470 回答