Considere um dataframe R conforme abaixo.
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
Dado parent_amt 25 para p1 nas duas últimas linhas, quero calcular o Child_amt para c1 como a proporção de 25 que é igual à proporção da soma de Child_amt para c1 com a soma de parent_amt para p1 em todas as linhas acima os últimos dois. Eu quero fazer algo semelhante para c2. Como eu faço isso? Não consigo pensar em nada na R. Alguém pode ajudar?
Não entendo muito bem a estrutura dos seus dados. Não tenho certeza se deve ser organizado dessa forma. Consegui produzir os resultados que você queria usando 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
Presumi que Parent_amt está predefinido para 25 e que estamos produzindo Child_amt a partir da combinação anterior de Parent_amt e Child_amt como você descreveu
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras