¿Cómo barra columnas específicas con dplyr?

Una operación increíblemente común para mi tipo de datos es aplicar un factor de normalización a todas las columnas. Esto se puede hacer de manera eficiente usandosweep oscale:

normalized = scale(data, center = FALSE, scale = factors)
# or
normalized = sweep(data, 2, factors, `/`)

Dónde

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)

Sin embargo, ¿cómo hago esto con dplyr, cuando mis datos tienen columnas adicionales al frente? Puedo hacerlo en declaraciones separadas, pero me gustaría hacerlo enuno tubería. Esta es mi información:

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

Y me gustaría mutar las columnas de datos sin tocar las dos primeras columnas. Normalmente puedo hacer esto conmutate_each; sin embargo, cómo no puedo pasar mis factores de normalización a esa función:

data %>% mutate_each(funs(. / factors), A:D)

Esto, como era de esperar, supone que quiero dividircada columna porfactors, en lugar de cada columna por su factor de coincidencia.

Respuestas a la pregunta(1)

Su respuesta a la pregunta