R中归一化后的NA

时间:2016-04-03 18:35:21

标签: r

我有以下数据框称为'天气'我正在努力规范化:

'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?该功能可根据需要在其他数据帧上运行。

2 个答案:

答案 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)))}