有没有办法使用 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))
我有一个全 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))