Непростая общая операция для моего типа данных - это применение коэффициента нормализации ко всем столбцам. Это можно сделать эффективно с помощью sweep
или scale
:
normalized = scale(data, center = FALSE, scale = factors)
# or
normalized = sweep(data, 2, factors, `/`)
Где
data = structure(list(A = c(3L, 174L, 6L, 1377L, 537L, 173L),
B = c(1L, 128L, 2L, 1019L, 424L, 139L),
C = c(3L, 66L, 2L, 250L, 129L, 40L),
D = c(4L, 57L, 4L, 251L, 124L, 38L)),
.Names = c("A", "B", "C", "D"),
class = c("tbl_df", "data.frame"), row.names = c(NA, -6L))
factors = c(A = 1, B = 1.2, C = 0.8, D = 0.75)
Однако, как мне это сделать с dplyr, когда у моих данных есть дополнительные столбцы впереди? Я могу сделать это в отдельных заявлениях, но Id нравится делать это в одном конвейере. Это мои данные:
data = structure(list(ID = c(1, 2, 3, 4, 5, 6),
Type = c("X", "X", "X", "Y", "Y", "Y"),
A = c(3L, 174L, 6L, 1377L, 537L, 173L),
B = c(1L, 128L, 2L, 1019L, 424L, 139L),
C = c(3L, 66L, 2L, 250L, 129L, 40L),
D = c(4L, 57L, 4L, 251L, 124L, 38L)),
.Names = c("ID", "Type", "A", "B", "C", "D"),
class = c("tbl_df", "data.frame"), row.names = c(NA, -6L))
И Id нравится мутировать столбцы данных, не касаясь первых двух столбцов. Обычно я могу сделать это с помощью mutate_each
; однако, как я не могу передать свои коэффициенты нормировки для этой функции:
data %>% mutate_each(funs(. / factors), A:D)
Это, что неудивительно, предполагает, что я хочу разделить каждый столбец на factors
, а не на каждый столбец по его коэффициенту соответствия.