首页 > 解决方案 > 如何在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

在同一思路下,我如何使用d中的transmute变量乘以xy乘以xztibble

d <- tibble(x = c(1,-1), y=c(2,3), z= c(4,5))

标签: rtibble

解决方案


您可以使用

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))

推荐阅读