我不能对数据框使用 scale() 函数

问题描述 投票:0回答:2

This is the Problem

我不知道这里有什么问题

r dataframe scale
2个回答
-1
投票

我猜你的数据中混合了字符串和数字列。要确保您的数据具有正确的类型(

numeric
character
,..)或某些数字数据已更改为另一种类型并将它们恢复为原始类型,请使用
type.convert()
并将
scale
应用于你的数据:

library(tidyverse)

trainX_s <- type.convert(trainX, as.is=T)
trainX_s <- mutate_if(trainX_s, is.numeric, scale)

-1
投票

我的猜测:

isnum <- sapply(data, isnum)
trainX_s <- trainX # a copy
trainX_s[isnum] <- data.frame(lapply(trainX[isnum], scale))

scale
函数自我描述为处理 “类矩阵对象”,框架不是这个。上面的
lapply
遍历每一列并独立缩放它们。

如果您已经在使用

dplyr
,那么您可能会做这样的一步操作:

library(dplyr)
trainX_s <- mutate(trainX, across(where(is.numeric), ~ scale(.)))

根据您的数据,您可能需要防止缩放整数,以防它们是离散/有序(或离散/分类),不幸的是

is.numeric(1L)
是真实的,在这种情况下您可能需要

isnum <- sapply(trainX, function(z) is.numeric(z) & !is.integer(z))
© www.soinside.com 2019 - 2024. All rights reserved.