R-仅在混合类型的数据帧中缩放数值

R-仅在混合类型的数据帧中缩放数值,r,R,我使用的数据帧具有混合数据类型(数字和字符),并且还具有字符键作为主要标识符。我想缩放数值变量并使其居中。我尝试过使用scale()函数,但它要求所有字段都是数字。当我只取数字字段并缩放它们时,我必须删除字符标识符才能缩放它们 我的理想结束状态是,我有一个带有字符字段和缩放数字字段的数据帧 我意识到这是一个新手问题,所以请温柔一点;-) 谢谢 Jim像这样的东西应该可以满足您的需求: library(MASS) ind <- sapply(anorexia, is.numeric) ano

我使用的数据帧具有混合数据类型(数字和字符),并且还具有字符键作为主要标识符。我想缩放数值变量并使其居中。我尝试过使用scale()函数,但它要求所有字段都是数字。当我只取数字字段并缩放它们时,我必须删除字符标识符才能缩放它们

我的理想结束状态是,我有一个带有字符字段和缩放数字字段的数据帧

我意识到这是一个新手问题,所以请温柔一点;-)

谢谢


Jim

像这样的东西应该可以满足您的需求:

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

ind以下代码不需要任何外部库:

# 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])
        }
    }
}
#缩放数据框中的所有数字列。
#df是您的数据帧

执行标记如果
,可以使用
dplyr::mutate\u直接执行此操作:

library(dplyr)

iris %>%
    mutate_if(is.numeric, scale)

非常感谢。这个比例和中心(标准化)会吗?@Jim是的,它就是这样做的。看看
?scale
。另一个也不是,
库(MASS)
提供了示例数据集。