Умножение тибблов поэлементно

У меня есть две таблицы (равное количество строк и столбцов), например:

first <- tibble::tribble(

~date,             ~col1,    ~col2,
"2000-01-01",       8.2,      10.10,
"2000-01-02",       3.2,      20.30,
"2000-01-03",       2.3,      10.3,
"2000-01-04",       5.5,      12.0,
"2000-01-05",       1.8,      10.7,
"2000-01-06",       1.3,      15.1,
"2000-01-07",       7.3,      16.2
)

second <- tibble::tribble(

~date,            ~col1,     ~col2,
"2000-01-01",        1,        0,
"2000-01-02",        1,        0,
"2000-01-03",        1,        0,
"2000-01-04",        1,        0,
"2000-01-05",        0,        0,
"2000-01-06",        0,        0,
"2000-01-07",        0,        1
)

Я хотел бы умножить оба элемента по элементам (конечно, за исключением первого столбца, содержащего даты), что даст следующий результат:

result <- tibble::tribble(

~date,             ~col1,    ~col2,
"2000-01-01",       8.2,      0,
"2000-01-02",       3.2,      0,
"2000-01-03",       2.3,      0,
"2000-01-04",       5.5,      0,
"2000-01-05",        0,       0,
"2000-01-06",        0,       0,
"2000-01-07",        0,      16.2
)

Есть ли возможность сделать это с помощью пакета dplyr?


person Community    schedule 15.01.2019    source источник
comment
Так что просто first[-1] * second[-1] ?? или cbind.data.frame(first[1], first[-1] * second[-1]), чтобы быть более полным   -  person Sotos    schedule 15.01.2019
comment
Да, но я хотел бы сохранить столбец даты.   -  person    schedule 15.01.2019


Ответы (1)


Как это?

first %>% keep(is.numeric) * second %>% keep(is.numeric)

  col1 col2
1  8.2  0.0
2  3.2  0.0
3  2.3  0.0
4  5.5  0.0
5  0.0  0.0
6  0.0  0.0
7  0.0 16.2

or

bind_cols(first %>% select(date),first %>% keep(is.numeric) * second %>% keep(is.numeric))

# A tibble: 7 x 3
  date        col1  col2
  <chr>      <dbl> <dbl>
1 2000-01-01   8.2   0  
2 2000-01-02   3.2   0  
3 2000-01-03   2.3   0  
4 2000-01-04   5.5   0  
5 2000-01-05   0     0  
6 2000-01-06   0     0  
7 2000-01-07   0    16.2
person Marco De Virgilis    schedule 15.01.2019