r - 如何根据其他行中的值填充 R 数据框中的一行中的值
问题描述
考虑如下的 R 数据框。
Month Parent Child Parent_amt Child_amt
1 p1 c1 30 10
1 p1 c2 30 20
1 p2 c1 40 15
1 p2 c2 40 25
2 p1 c1 60 10
2 p1 c2 60 50
2 p2 c1 20 15
2 p2 c2 20 5
3 p1 c1 25 (10+10)/(30+60)*25
3 p1 c2 25 (20+50)/(30+60)*25
给定最后两行中 p1 的 parent_amt 25 我想将 c1 的 Child_amt 计算为 25 的比例,该比例等于 c1 的 Child_amt 的总和与 p1 的 parent_amt 总和的比率以上所有行最后两个。我想为 c2 做类似的事情。我该怎么做呢?我真的想不出R中的任何方法。有人可以帮忙吗?
解决方案
我不太了解您的数据结构。我不确定它应该以这种方式组织。我已经设法使用 dplyr 产生了您想要的结果:
library(tibble)
library(dplyr)
df <- tibble::tribble(
~Month, ~Parent, ~Child, ~Parent_amt, ~Child_amt,
1, "p1", "c1", 30, 10,
1, "p1", "c2", 30, 20,
1, "p2", "c1", 40, 15,
1, "p2", "c2", 40, 25,
2, "p1", "c1", 60, 10,
2, "p1", "c2", 60, 50,
2, "p2", "c1", 20, 15,
2, "p2", "c2", 20, 5,
)
new_df <- df %>%
dplyr::bind_rows({
df %>%
dplyr::group_by(Parent, Child) %>%
dplyr::summarise(
Child_amt = sum(Child_amt) / sum(Parent_amt)
) %>%
dplyr::mutate(Month = 3, Parent_amt = 25, Child_amt = Child_amt * 25)
})
new_df
我假设 Parent_amt 预设为 25,并且我们正在根据您描述的 Parent_amt 和 Child_amt 的先前组合生成 Child_amt
推荐阅读
- r - 在 mutate 中声明变量
- r - ggplot2 - 线条和误差线重叠的问题
- swift - 使用可选类型协议有意义吗?
- amazon-web-services - 如何通过 Terraform 将现有隐私政策附加到 IAM 角色
- debugging - julia LoadError: UndefVarError: @showprogress 未定义
- linux - 如何使用 c 库函数将文本文件的内容打印到 Linux 汇编语言中的 STDOUT?
- browser-cache - 强制从服务器加载图像而不是缓存
- python - 如何从带有下拉框的网站下载 CSV 数据?
- python-3.x - 提取字符串的一部分并将其附加到标签
- redirect - SSL DSN 隐藏重定向从 sub1.domain1.com 到 sub2.domain2.com