Как сделать так, чтобы оператор ifelse не очищал предыдущие данные? - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь импортировать некоторые учетные данные в новое программное обеспечение, и мне нужно добавить дебетовый столбец journalItemLine_debitAmount и кредитный столбец journalItemLine_creditAmount, которые заполняются, если в исходных данных есть дебет или кредит. Когда я запускаю свой сценарий, я заканчиваю только данными, помеченными как Кредит, когда положительно, и ни одним из Дебета, когда положительно.

data = within(data, {
journalItemLine_debitAmount = ifelse(If.Positive. == "Debit" & Amount>=0, Amount, "")
journalItemLine_creditAmount = ifelse(If.Positive. == "Debit" & Amount<0, -Amount, "")
journalItemLine_debitAmount = ifelse(If.Positive. == "Credit" & Amount<0, -Amount, "")
journalItemLine_creditAmount = ifelse(If.Positive. == "Credit" & Amount>=0, Amount, "")
 })

Вот исходные данные:

Amount     If.Positive.
0.00     Debit
-546     Debit
789     Credit
45789     Debit
-34657     Credit

Вот что я хотел бы:

Amount     If.Positive.     journalItemLine_debitAmount     journalItemLine_creditAmount
0.00     Debit     0
-54623     Debit          54623
78934     Credit          78934
45789     Debit     45789
-34657     Credit     34657

Не уверен, что я отформатировал только что введенные данные, но представьте, что каждый из них - это столбец.

Я тоже попробовал это утверждение if, но, похоже, ничего не произошло.

journalItemLine_debitAmount = if((If.Positive. == "Debit") && (Amount>=0)){Amount}
journalItemLine_creditAmount = if((If.Positive. == "Debit") && (Amount<0)){-Amount}
journalItemLine_debitAmount = if((If.Positive. == "Credit") && (Amount<0)){-Amount}
journalItemLine_creditAmount = if((If.Positive. == "Credit") && (Amount>=0)){Amount}
})

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Вы также можете попробовать:

data$journalItemLine_debitAmount[If.Positive. == "Debit" & Amount>=0]<- Amount
data$journalItemLine_debitAmount[If.Positive. == "Debit" & Amount<0] <- -Amount
data$journalItemLine_creditAmount[If.Positive. == "Credit" & Amount<0] <- -Amount
data$journalItemLine_creditAmount[If.Positive. == "Credit" & Amount>=0] <- Amount

или проще:

data$journalItemLine_debitAmount[If.Positive. == "Debit"]<- abs(Amount)
data$journalItemLine_creditAmount[If.Positive. == "Credit"] <- abs(Amount)

Надеюсь, это поможет!

0 голосов
/ 17 мая 2019

Я думаю, вы просто хотите

data = within(data, {
  journalItemLine_debitAmount = ifelse(
    (If.Positive. == "Debit" & Amount>=0) | (If.Positive. == "Credit" & Amount<0),
     abs(Amount), NA)
  journalItemLine_creditAmount = ifelse(
     (If.Positive. == "Credit" & Amount>=0) | (If.Positive. == "Debit" & Amount<0),
     abs(Amount), NA)
})

Это позволяет избежать повторного присвоения одному и тому же значению дважды и просто использует абсолютное значение для сохранения положительного числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...