我在考虑一项潜在的政策变更,如果它们符合特定条件,组织(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上找到。
请在您的帖子中包含所有相关信息。链接到非现场资源可能会导致死链接没有先进的警告,使这个问题对后代无用。 –