R - масштабирование числовых значений только в фрейме данных со смешанными типами

Я работаю с фреймом данных, который имеет смешанные типы данных (числовые и символьные), а также имеет символьный ключ в качестве основного идентификатора. Я хотел бы масштабировать и центрировать числовые переменные. Я пробовал использовать функцию scale(), но для этого требуется, чтобы все поля были числовыми. Когда я беру только числовые поля и масштабирую их, я должен отказаться от символьного идентификатора, чтобы иметь возможность масштабировать их.

Мое идеальное конечное состояние заключается в том, что у меня есть кадр данных с полями символов и масштабированными числовыми полями.

Я понимаю, что это вопрос новичков, поэтому, пожалуйста, будьте осторожны; -)

Спасибо!

Джим

Ответ 1

Что-то вроде этого должно делать то, что вы хотите:

library(MASS)
ind <- sapply(anorexia, is.numeric)
anorexia[ind] <- lapply(anorexia[ind], scale)

Ответ 2

Этот код ниже не нуждается в какой-либо внешней библиотеке:

# Scale all numeric columns in a data frame.
# df is your data frame

performScaling <- TRUE  # Turn it on/off for experimentation.

if (performScaling) {

    # Loop over each column.
    for (colName in names(df)) {

        # Check if the column contains numeric data.
        if(class(df[,colName]) == 'integer' | class(df[,colName]) == 'numeric') {

            # Scale this column (scale() function applies z-scaling).
            df[,colName] <- scale(df[,colName])
        }
    }
}