问题
我希望找到一种优雅的tidyverse方案,以创建每个n列的m个乘积之和。我不想使用位置匹配,并且应该是可泛化的。
我尝试使用 purrr :: pmap_dbl(select(。,ends_with(i)),prod)
进行尝试,但是没有取得很大进展。
m = 3和n = 2的示例
library(tidyverse)
df <- tibble(
x_0 = c(5,6),
x_1 = c(9,1),
x_2 = c(2,1),
y_0 = c(3,2),
y_1 = c(3,2),
y_2 = c(1,3)
)
df
> df
# A tibble: 2 × 6
# x_0 x_1 x_2 y_0 y_1 y_2
#<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 5 9 2 3 3 1
# 6 1 1 2 2 3
我想要按行计算每个元素的乘积总和:
sum_of_products = x_0 * y_0 + x_1 * y_1 + x_2 + y_2
第一行: 5*3+9*3+2*2 = 46
; 第二行: 6*2+1*2+1*3 = 17
期望输出结果
df_with_sum_of_products
# x_0 x_1 x_2 y_0 y_1 y_2 sum_of_products
#<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 5 9 2 3 3 1 46
# 6 1 1 2 2 3 17
df %>% mutate(sum_prod = rowSums(across(starts_with("x"), ~ . * get(sub("x", "y", cur_column())))))
:) - tmfmnk