根据另一列的值来操作数据框中的某一列的数值

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中存在这样的解决方案。谢谢大家!

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> 

感谢您为我解释清楚! - helasraizam

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

这是您要找的内容。您需要使用逗号来指定您正在使用数据框的行。


那个逗号是我在所有的试错中遇到最大的麻烦 - 非常感谢! - helasraizam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接