如何在特定行的列之间切换值?

时间:2019-05-21 18:22:35

标签: r if-statement

我正在为一些会计工作建立数据集,但无意中犯了一个错误。我想将帐户journalItemLine_creditAmount中的每个贷方实例(列3605)切换为借方(列journalItemLine_debitAmount),并将借方的每个实例实例转换为贷方。

data<-read.csv(file.choose(),head=TRUE)  
fixed_data<-if(data$journalItemLine_account="3605"){journalItemLine_debitAmount==journalItemLine_creditAmount}
fixed_data<-if(data$journalItemLine_account="3605"){journalItemLine_creditAmount==journalItemLine_debitAmount}

这是我遇到的错误。 Error: unexpected '=' in " fixed_data<-if(data$journalItemLine_account="

3 个答案:

答案 0 :(得分:0)

从@qdread的评论中得知,您遇到了一些问题:

  1. <input type="button">失败,因为您应该分配,因此您应该测试相等性。请改用if (a=1) ...

  2. if (a==1) ...要求其条件的长度必须恰好为1,但是只有当您的框架有1行时,情况才会如此; 0或大于2会给您一个警告:“条件的长度> 1,并且将仅使用第一个元素” 。而是使用if

  3. 您的重新分配可能应该进入框架的一列。您的ifelse(condition, then, else)是一个向量(可以),但此后实际上不在该帧中。实际上,上面#2中推荐的fixed_data并不了解或不在乎帧,它只对矢量起作用,因此“有条件”,“然后”(如果为true)和“其他”(如果为false) )参数都必须是相同长度(或长度1,可循环使用)的向量。

然后您的代码应如下所示(未经测试):

ifelse

(再次,未测试!,请先验证所做的更改,然后再对所有数据使用此功能。)

答案 1 :(得分:0)

尝试以下方法。它使用逻辑索引来获取感兴趣的值。

inx <- data$journalItemLine_account == "3605"

tmp <- data$journalItemLine_debitAmount[inx]
data$journalItemLine_debitAmount[inx] <- data$journalItemLine_creditAmount[inx]
data$journalItemLine_creditAmount[inx] <- tmp

最终清理。

rm(inx, tmp)

答案 2 :(得分:0)

我需要示例数据进行验证,但是transform也应该可以工作:

new_data <- transform(fixed_data, 
                      journalItemLine_debitAmount = ifelse(data$journalItemLine_account=="3605", journalItemLine_creditAmount, journalItemLine_debitAmount),
                      journalItemLine_creditAmount = ifelse(data$journalItemLine_account=="3605", journalItemLine_debitAmount, journalItemLine_creditAmount))