首页 > 解决方案 > 如何根据其他行中的值填充 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中的任何方法。有人可以帮忙吗?

标签: 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


推荐阅读