Я думаю, что общее решение для n
предметов мне не подходит, но оно должно быть выполнимым.
Во-первых, некоторые поддельные данные:
# (BTW, it would be more helpful to provide this as text in your question.)
library(dplyr); library(tidyr)
set.seed(42)
df <- data_frame(ID = rep(1:100, 5),
Item = rep(1:5, each = 100),
value = runif(500))
df
# I've made it in "long" format, but we can show in wide format like this
df_wide <- df %>% spread(Item, value)
df_wide
Вот решение для всех комбинацийиз двух предметов:
output_tbl <- df %>%
group_by(ID) %>%
crossing(.$Item, .$Item) %>%
ungroup() %>%
select(-Item, -value) %>%
left_join(df, by = c("ID" = "ID",
'.$Item' = "Item")) %>%
left_join(df, by = c("ID" = "ID",
".$Item1" = "Item")) %>%
mutate(output = (exp(value.x) + exp(value.y)) / (exp(value.x) + exp(value.y) + 4))
А вот решение для всех комбинаций из трех предметов:
output_tbl <- df %>%
group_by(ID) %>%
crossing(.$Item, .$Item, .$Item) %>%
ungroup() %>%
select(-Item, -value) %>%
left_join(df, by = c("ID" = "ID",
'.$Item' = "Item")) %>%
left_join(df, by = c("ID" = "ID",
".$Item1" = "Item")) %>%
left_join(df, by = c("ID" = "ID",
".$Item2" = "Item")) %>%
mutate(output = (exp(value.x) + exp(value.y) + exp(value)) /
(exp(value.x) + exp(value.y) + exp(value) + 4))