Как умножить два тибля с разными размерами на R? - PullRequest
0 голосов
/ 03 апреля 2019

Когда я умножаю вектор на матрицу, я делаю:

mat <- matrix(c(c(2,3),c(4,5)),2)
vec <- c(1,-1) 
vec * mat

Я получаю

     [,1] [,2]
[1,]    2    4
[2,]   -3   -5

Но когда я пытаюсь сделать что-то подобное с тибблами, например

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

1 Ответ

1 голос
/ 03 апреля 2019

Вы можете использовать

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