【发布时间】:2021-09-11 22:39:17
【问题描述】:
我对 R 很陌生,正在寻找一种有效的方法来根据特定条件更新单元格中的值。我假设这需要一个 for 循环或其他函数。
这是数据集。
project_ID <- c(1, 1, 1, 2, 2, 2, 3, 3, 3)
sector <- c("Energy", "None", "None", "Water", "None", "None", "Solar", "Solar", "None")
percentage_approval <- c(100, 50, 50, 100, 25, 25, 100, 30, 40)
type <- c("Program", "Sub-Project", "Sub-Project", "Program", "Sub-Project", "Sub-Project", "Program", "Sub-Project", "Sub-Project")
funding <- c(5, 2.5, 2.5, 16, 4, 4, 10, 3, 4)
cofinancing <- c(100000, 750000, 80000, 4000000, 6660000, 11000, 12000, 1111111, 1111999)
df <- data.frame(project_ID, sector, percentage_approval, type, funding, cofinancing)
我想做的事:
按项目 ID 对数据进行分组。
然后,检查子项目的“percentage_approval”之和是否等于100。如果是这样,则应删除具有相同项目ID的“程序”行。
如果子项目的“percentage_approval”之和不等于100,则需要进行以下调整:
- 从同一项目的项目中减去子项目“资助” 身份证。
- 根据“子项目”金额调整“联合融资”。因此,例如,项目 ID #2 的计划的联合融资应调整为 677000(即,基于子项目联合融资的剩余 50%(即 666000 + 11000))。同样,对于项目 ID #3,该计划的联合融资应更新为 1285714.29(即,剩余的 30% 基于子项目的联合融资水平)。
最后,我想更新“无”的扇区,以获取每个项目 ID 的扇区值。
因此,这是我想要的决赛桌:
project_ID_2 <- c(1, 1, 2, 2, 2, 3, 3, 3)
sector_2 <- c("Energy", "Energy", "Water", "Water", "Water", "Solar", "Solar", "None")
percentage_approval_2 <- c(50, 50, 100, 25, 25, 100, 30, 40)
type_2 <- c("Sub-Project", "Sub-Project", "Program", "Sub-Project", "Sub-Project", "Program", "Sub-Project", "Sub-Project")
funding_2 <- c(2.5, 2.5, 8, 4, 4, 3, 3, 4)
cofinancing_2 <- c(750000, 80000, 677000, 666000, 11000, 1285714.29, 1000000, 2000000)
df.fixed <- data.frame(project_ID_2, sector_2, percentage_approval_2, type_2, funding_2, cofinancing_2)
【问题讨论】: