2016-04-03 115 views
0

正常化後,我所說的「天氣」下面的數據幀,我想正常化:NA 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?該功能根據需要在其他數據幀上根據需要工作。

+0

請參閱'?max'。你想要'na.rm'。 – MichaelChirico

+1

發佈一個可重現的例子,而不是'str' – Sotos

+1

我也會這樣做:'r < - range(x,na.rm = TRUE);返回((x - r [1])/ diff(r))' - 你正在計算'min'兩次 – MichaelChirico

回答

1

max()min()需要與na.rm = T一起使用,以在計算其各自結果時「跳過」NA值。

+0

所以我需要添加na.rm = T? – DataGuy

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