我遇到了类似的问题,但仍然无法解决我的问题。反正, 我有一个数据框(大小:36*42),其中包含数字,而在最后一行(第 36 行)中,它包含每列的日期。 我想使用以下函数规范化该数据帧的列(除最后一行之外的整个数据帧):
normalize<-function(x){return((x-min(x, na.rm=TRUE))/(max(x, na.rm=TRUE)-min(x, na.rm=TRUE)))}
但我总是收到此错误:
Error in x - min(x, na.rm = TRUE) : non-numeric argument to binary operator
我尝试过的事情
as.data.frame(lapply(df[c(1:nrow(df)-1),], normalize))
顺便说一句,当我检查 typeof(df)
时,它显示 df
是一个 list
但当我使用 检查它时>is.list(df)->TRUE
以及 is.data.frame(df)->TRUE
,这让我很困惑。
谢谢
最佳答案
该问题与变量类有关。检查类 - class( mtcars$mpg ) 。此函数会将您的列转换为数字
normalize<-function(x){
x <- as.numeric( as.character( x ))
y <- (x-min(x, na.rm=TRUE))/
(max(x, na.rm=TRUE)-min(x, na.rm=TRUE))
return(y)
}
它的工作原理请参阅: 标准化( mtcars$mpg ) 标准化(as.character(mtcars$mpg))
您可以添加到数据框中
mtcars$newvar <- normalize( mtcars$mpg )
或者做几列
mtcars[ , 3:7]<- sapply( mtcars[ , 3:7], normalize )
关于r - 规范化数据帧 - 错误 : non-numeric argument to binary - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968519/