You are really close.
df2 <-
df %>%
mutate(v1v3 = v1 * v3,
v2v4 = v2 * v4)
such a beautiful simple language, right?
For more great tricks, please see here.
: @Facottons : fooobar.com/questions/1238742/..., . . , Base R, , , /. , , .
df <-
df %>%
mutate(prod_grp = paste0("v", row_number(), "v", row_number() + 2))
tidy_df <-
df %>%
gather(column, value, -prod_grp) %>%
mutate(column = as.numeric(sub("v", "", column)),
pair = column - 2) %>%
mutate(pair = if_else(pair < 1, pair + 2, pair))
prod_df <-
tidy_df %>%
group_by(prod_grp, pair) %>%
summarize(val = prod(value)) %>%
spread(prod_grp, val) %>%
mutate(pair = paste0("v", pair, "v", pair + 2)) %>%
rename(prod_grp = pair)
final_df <-
df %>%
left_join(prod_df) %>%
select(-prod_grp)