我正在为一些会计工作建立数据集,但无意中犯了一个错误。我想将帐户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="
答案 0 :(得分:0)
从@qdread的评论中得知,您遇到了一些问题:
<input type="button">
失败,因为您应该分配,因此您应该测试相等性。请改用if (a=1) ...
。
if (a==1) ...
要求其条件的长度必须恰好为1,但是只有当您的框架有1行时,情况才会如此; 0或大于2会给您一个警告:“条件的长度> 1,并且将仅使用第一个元素” 。而是使用if
。
您的重新分配可能应该进入框架的一列。您的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))