Без четкого воспроизводимого примера я не могу быть уверен, но я верю, что это то, что вы хотите:
dd <- tibble::tribble(
~name, ~date, ~balls.purchased, ~balls.left,
'a', 'Feb-17', 10, 5,
'a', 'Mar-17', 12, 4,
'a', 'June-18', 14, 6,
'b', 'Feb-17', 16, 1,
'b', 'June-18', 18, 7
)
library(dplyr)
library(tidyr)
dd %>%
gather(key, value, -name, -date) %>%
unite('key', date, key) %>%
spread(key, value, fill = 0)
# A tibble: 2 x 7
name `Feb-17_balls.left` `Feb-17_balls.purchased` `June-18_balls.left` `June-18_balls.purchased` `Mar-17_balls.left` `Mar-17_balls.purchased`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 a 5 10 6 14 4 12
2 b 1 16 7 18 0 0