R:根据另一列操作一个数据框列的值

时间:2013-01-13 00:31:47

标签: r dataframe multiple-columns

假设您有银行帐户信息:

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 个答案:

答案 0 :(得分: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> 

答案 1 :(得分:3)

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

您正在寻找什么。您需要逗号来指定您正在使用数据框行的事实。