Предположим, что я составляю таблицу вероятностей в каждом раунде исследования по странам, раундам и типам. И мне нужно рассчитать вес на основе раундов, в которых человек участвовал до этого момента. Вес рассчитывается как обратная сумма всех вероятностей (p) минус произведение всех вероятностей до раунда, в котором участвовал человек.
Я подумал об использовании case_when () и, по крайней мере, записал его на 10 раундов, если я не могу найти способ автоматизировать его для будущих раундов, но не уверен, что я на правильном пути. Приветствуются любые указания от настоящего пользователя R!
For id=1 in the example below,
p is 0.78584735 for round=1 and type=2 and country="DE"
p is 0.07271288 for round=2 and type=2 and country="DE"
Then, p_tot should be (0.78584735+0.07271288)- (0.78584735*0.07271288)
# Table with probabilities
set.seed(1245)
prob_table <- data.frame(country=c(rep("DE",6), rep("UK",6)),
round=c(rep(1,3),rep(2,3),rep(1,3),rep(2,3)),
type=c(rep(1:3,2)), p=c(runif(12)))
# Data frame with participants
df <- data.frame(id=c(1:15), country=c(rep("DE",8), rep("UK",7)),
round=c(2,3,1,1,1,2,1,1,2,3,1,3,2,2,2),
type=c(2,3,1,1,1,2,3,1,2,1,1,3,1,1,2))
# Calculate total probability
df %<>% mutate(
p_tot = case_when(
country=="DE" & round==1 & type==1
~ prob_table%>% filter(country=="DE" & round<=1 & type==1) %>%
sum(all elements of p column)-multiply(all elements of p column),
country=="DE" & round==1 & type==1
~ prob_table%>% filter(country=="DE" & round<=1 & type==1) %>%
sum(all elements of p column)-multiply(all elements of p column),
...
...
TRUE ~ NA
)
)
# calculate weight
df$weight <- 1/df$p_tot