Если вам нужно использовать stats::reshape()
, вы можете
(1) преобразовать данные в более длинный формат, в котором оба значения sum
и max
находятся в одном столбце:
my.data.longer <- stats::reshape(data = my.data,
idvar = 1:2,
v.names = "value",
timevar = "variable",
times = c("sum", "max"),
varying = 3:4,
direction = "long")
Что выглядит следующим образом (пока не беспокойтесь об именах строк.):
cust_id merchant_group variable value
495.AIRLINE.sum 495 AIRLINE sum 45493
495.AUTO RENTAL.sum 495 AUTO RENTAL sum 3104
495.CLOTHING STORES.sum 495 CLOTHING STORES sum 20928
495.DEPARTMENT STORES.sum 495 DEPARTMENT STORES sum 1082
495.DRUG STORES.sum 495 DRUG STORES sum 482
495.AIRLINE.max 495 AIRLINE max 4950
495.AUTO RENTAL.max 495 AUTO RENTAL max 1000
495.CLOTHING STORES.max 495 CLOTHING STORES max 3140
495.DEPARTMENT STORES.max 495 DEPARTMENT STORES max 495
495.DRUG STORES.max 495 DRUG STORES max 165
(2) измените более длинные данные в нужный вам широкий формат:
my.data.wide <- stats::reshape(data = my.data.longer,
idvar = c("cust_id", "variable"),
timevar = "merchant_group",
times = as.character(my.data$merchant_group),
v.names = "value",
direction = "wide")
Что выглядит следующим образом:
cust_id variable value.AIRLINE value.AUTO RENTAL value.CLOTHING STORES value.DEPARTMENT STORES value.DRUG STORES
495.AIRLINE.sum 495 sum 45493 3104 20928 1082 482
495.AIRLINE.max 495 max 4950 1000 3140 495 165
(3) Удалить столбец variable
, изменить столбец names
и сбросить row.names
:
my.data.wide$variable <- NULL
names(my.data.wide)[2:ncol(my.data.wide)] <- as.character(my.data$merchant_group)
row.names(my.data.wide) <- NULL
my.data.wide
Результат:
cust_id AIRLINE AUTO RENTAL CLOTHING STORES DEPARTMENT STORES DRUG STORES
1 495 45493 3104 20928 1082 482
2 495 4950 1000 3140 495 165