有没有办法使用 mutate 将叉积应用于 R 中的新列?

Is there a way to apply a crossproduct to a new column in R using mutate?

我有一个全 1 和 0 的数据框,以及一个与数据框中每一列相关的向量,我想在数据框中创建一个新列,它是数据框中每一行的和积和向量。考虑这个例子:

    dataframe <- data.frame(a = c(1, 1, 1), b = c(0, 1, 0), c = c(1, 1, 0))
    > dataframe
      a b c
    1 1 0 1
    2 1 1 1
    3 1 0 0
    > nums <- c(100, 200, 300)
    > nums
    [1] 100 200 300

然后我希望 d 列等于 (400, 600, 100)。我知道我可以通过编写一个循环来做到这一点,但我正在尝试使用 mutate 和 crossprod 并收到错误“需要 numeric/complex matrix/vector 参数”

谢谢!

你可以这样做:

dataframe %>% mutate(d = as.matrix(.) %*% nums)

#>   a b c   d
#> 1 1 0 1 400
#> 2 1 1 1 600
#> 3 1 0 0 100

dataframe %>% mutate(d = crossprod(t(as.matrix(.)), nums))

#>   a b c   d
#> 1 1 0 1 400
#> 2 1 1 1 600
#> 3 1 0 0 100
dataframe %>% 
   mutate(d = crossprod(dataframe %>% data.matrix %>% t, nums))