r - 规范化数据帧 - 错误 : non-numeric argument to binary - R

标签 r list dataframe normalize

我遇到了类似的问题,但仍然无法解决我的问题。反正, 我有一个数据框(大小: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/

相关文章:

javascript - 如果 li 里面有 ul

java - 为什么如果我直接添加答案,我的列表函数在这个问题中不起作用,但如果我创建列表的副本则起作用

python - 提取另一列中列出的 pandas 中特定列名的值

r - 使用 R 将 XML 转换为 JSON

r - 如何从列表中的多个向量中选择多个元素

r - 行之间的条件时间差。研发&dplyr/data.table

python - 将列表的列表拆分为每个列表的第一个元素的列表的命令

python - 根据时间序列数据帧的时间列更正日期列中的条目

r - 根据条件求 R 中的行总和

r - 使用条件语句 (case_when) 跨多列更改 kableExtra 中的单元格颜色