我有以下数据框称为'天气'我正在努力规范化:
'data.frame': 4745 obs. of 9 variables:
$ TimeofDay : int 700 800 900 1000 1100 1200 1300 1400 1500 1600 ...
$ AirTemp : num 16.4 17.7 19.3 19.8 21.3 ...
$ Humidity : num 76.3 68.5 57.4 53.6 49.2 ...
$ Dewpoint : num 12.2 11.8 10.7 10.2 10.2 ...
$ BarPres : num 101 101 101 101 101 ...
$ MaxWindSpeed : num 4.45 5.25 5.25 6.85 5.25 ...
$ Zenith : num 99 88.4 81.7 72.2 64.5 59.2 57.1 58.4 63 70.3 ...
$ Azimuth : num -99 119 125 135 148 ...
$ TotalSolarRad: int 0 2 77 116 76 93 138 125 138 82 ...
我正在使用标准规范化功能,如下所示:
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
并像这样应用:
weatherNorm <- as.data.frame(lapply(weather, normalize))
标准化后,新数据帧由许多NA值组成,如下所示:
'data.frame': 4745 obs. of 9 variables:
$ TimeofDay : num NA NA NA NA NA NA NA NA NA NA ...
$ AirTemp : num NA NA NA NA NA NA NA NA NA NA ...
$ Humidity : num NA NA NA NA NA NA NA NA NA NA ...
$ Dewpoint : num NA NA NA NA NA NA NA NA NA NA ...
$ BarPres : num NA NA NA NA NA NA NA NA NA NA ...
$ MaxWindSpeed : num NA NA NA NA NA NA NA NA NA NA ...
$ Zenith : num 1 0.879 0.803 0.695 0.607 ...
$ Azimuth : num 0 0.562 0.577 0.604 0.635 ...
$ TotalSolarRad: num 0 0.00199 0.07669 0.11554 0.0757 ...
是否有任何理由将函数值更改为NA?该功能可根据需要在其他数据帧上运行。
答案 0 :(得分:1)
max()
和min()
需要与na.rm = T
一起使用以“跳过”NA
个值。
答案 1 :(得分:0)
这里的问题是你的矢量包含NA值。对包含NA值的向量使用min()和max()返回NA。 min()和max()中有一个可选参数,即na.rm,默认设置为FALSE。 设置为true时,此参数允许min()和max()跳过NA值。因此,在这种情况下,将您的功能更改为
normalize <- function(x) {
return ((x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE)))}