如何在 R 中乘以不同维度的两个 tibbles?
How to multiply two tibbles with different dimensions in R?
当我将一个向量乘以一个矩阵时:
mat <- matrix(c(c(2,3),c(4,5)),2)
vec <- c(1,-1)
vec * mat
我明白了
[,1] [,2]
[1,] 2 4
[2,] -3 -5
但是当我尝试用 tibbles 做一些类似的事情时,比如
library(dplyr)
a <- tibble(x = c(1,-1))
b <- tibble(y = c(2,3), z = c(4,5))
c <- a*b
我收到错误,
Error in Ops.data.frame(a, b) :
‘*’ only defined for equally-sized data frames
同样的思路,如何使用transmute
将变量x
乘以y
和x
乘以z
在tibble
d?
d <- tibble(x = c(1,-1), y=c(2,3), z= c(4,5))
您可以使用
d %>% mutate_at(vars(c(y, z)), ~.x*x)
或者如果您有超过两列
d %>% mutate_at(vars(-x), ~.x*x)
请注意,如果您使用的是旧版本的 dplyr
软件包,则必须使用略有不同的语法,如下所示:
d %>% mutate_at(vars(-x), funs(. * x))
d %>% mutate_at(vars(c(y, z)), funs(. * x))
当我将一个向量乘以一个矩阵时:
mat <- matrix(c(c(2,3),c(4,5)),2)
vec <- c(1,-1)
vec * mat
我明白了
[,1] [,2]
[1,] 2 4
[2,] -3 -5
但是当我尝试用 tibbles 做一些类似的事情时,比如
library(dplyr)
a <- tibble(x = c(1,-1))
b <- tibble(y = c(2,3), z = c(4,5))
c <- a*b
我收到错误,
Error in Ops.data.frame(a, b) :
‘*’ only defined for equally-sized data frames
同样的思路,如何使用transmute
将变量x
乘以y
和x
乘以z
在tibble
d?
d <- tibble(x = c(1,-1), y=c(2,3), z= c(4,5))
您可以使用
d %>% mutate_at(vars(c(y, z)), ~.x*x)
或者如果您有超过两列
d %>% mutate_at(vars(-x), ~.x*x)
请注意,如果您使用的是旧版本的 dplyr
软件包,则必须使用略有不同的语法,如下所示:
d %>% mutate_at(vars(-x), funs(. * x))
d %>% mutate_at(vars(c(y, z)), funs(. * x))