我在考慮一項潛在的政策變更,如果它們符合特定條件,組織(OrgID
)將花費其現有的補助金。該數據是三列,和這裏的前六行:簡化包含多個ifelse語句的重複代碼
OrgID Amount Group
1 1 5782457 Group1
2 2 2280221 Group3
3 3 3260741 Group4
4 4 3869420 Group1
5 5 3950578 Group1
6 6 2058883 Group2
這會發生,每年一次,條件是基於哪個組的組織是在(Group
),和它們的當前餘額(Amount
) 。具體來說,
對於
Group
=Group1
- 如果Amount
爲$ 500,000或以下,所有的錢可以花
- 如果Amount
超過$ 500,000時,這些錢50%可以度過。對於
Group
=Group2
- 如果Amount
爲$ 300,000或以下,所有的錢可以花
- 如果Amount
超過$ 30萬時,錢30%可以度過。對於
Group
=Group3
- 如果Amount
爲$ 100,000或以下,所有的錢可以花
- 如果Amount
超過$ 100,000時,這些錢10%可以度過。對於
Group
=Group4
- 沒有錢可以在任何條件下花費。
我想知道每年在未來五年後剩餘的總錢,所以我轉向dplyr包,寫道:
mydata <-
mydata %>%
mutate(ReleaseOne =
ifelse(Group == "Group1",
ifelse(Amount <= 500000, Amount,
round(Amount*0.50, 2)),
ifelse(Group == "Group2",
ifelse(Amount <= 300000, Amount,
round(Amount*0.30, 2)),
ifelse(Group == "Group3",
ifelse(Amount <= 100000, Amount,
round(Amount*0.10, 2)), 0)))) %>%
mutate(RemainOne =
Amount - ReleaseOne)
...
mydata <-
mydata %>%
mutate(ReleaseFive =
ifelse(Group == "Group1",
ifelse(RemainFour <= 500000, RemainFour,
round((RemainFour)*0.50, 2)),
ifelse(Group == "Group2",
ifelse(RemainFour <= 300000, RemainFour,
round((RemainFour)*0.30, 2)),
ifelse(Group == "Group3",
ifelse(RemainFour <= 100000, RemainFour,
round((RemainFour)*0.10, 2)), 0)))) %>%
mutate(RemainFive =
RemainFour - ReleaseFive)
因此,我只是重複相同的塊的代碼五次,但每次更改以「釋放」和「剩餘」開頭的變量名稱(即RemaimOne
到RemainTwo
,ReleaseOne
到ReleaseTwo
等)。
這樣做很好,但它很雜亂。有沒有一種方法可以用自定義函數簡化它,例如可能包括for
和while
循環?
另外,知道多少年纔會有價值,直到組1,2和3中的所有組織達到Amount = 0
;但是,我知道如何做到這一點的唯一方法是不斷重複上述內容,直到數量達到零。
數據被命名爲mydata.txt,可在GitHub上的this link上找到。
請在您的帖子中包含所有相關信息。鏈接到非現場資源可能會導致死鏈接沒有先進的警告,使這個問題對後代無用。 –