如何在 R 中處理 apply 函式產生的 NA 輸出?
當我們在數值列和字元列上使用 apply 函式時,函式的輸出對所有列都返回 NA。為了解決這個問題,我們可以使用 lapply 函式。lapply 函式會獨立地處理每一列,因此算術運算將分別執行。
請檢視以下示例以瞭解其工作原理。
示例 1
以下程式碼片段建立了一個示例資料框:
x1<-rnorm(20) x2<-rnorm(20) x3<-LETTERS[1:20] df1<-data.frame(x1,x2,x3) df1
建立了以下資料框:
x1 x2 x3 1 1.8023520 0.02949008 A 2 -0.6755818 0.03066978 B 3 0.8067009 -1.42504773 C 4 -0.6978446 -0.03589390 D 5 -0.9768782 -2.29225371 E 6 0.7589207 -0.56158056 F 7 1.4361048 0.05587417 G 8 2.2569459 -1.64800771 H 9 1.0998291 -0.67096333 I 10 -0.7250079 1.02007341 J 11 -1.6972296 0.25851780 K 12 2.6042033 1.13646450 L 13 1.3473008 -0.24734074 M 14 0.5262951 -0.56210383 N 15 -0.4576343 0.32515395 O 16 1.2211340 1.18324358 P 17 0.3792386 -0.52471110 Q 18 -0.8220452 0.28614199 R 19 -0.5467174 -1.88444207 S 20 -0.7032419 -1.01928201 T
為了使用 apply 函式查詢 df1 中所有列的平均值,請將以下程式碼新增到上述程式碼片段中:
x1<-rnorm(20) x2<-rnorm(20) x3<-LETTERS[1:20] df1<-data.frame(x1,x2,x3) apply(df1,2,mean)
輸出
如果您將以上所有程式碼片段作為單個程式執行,它將生成以下輸出:
x1 x2 x3 NA NA NA Warning messages: 1: In mean.default(newX[, i], ...) : argument is not numeric or logical: returning NA 2: In mean.default(newX[, i], ...) : argument is not numeric or logical: returning NA 3: In mean.default(newX[, i], ...) : argument is not numeric or logical: returning NA
正確的方法是使用 lapply 而不是 apply。請將以下程式碼新增到上述程式碼片段中:
x1<-rnorm(20) x2<-rnorm(20) x3<-LETTERS[1:20] df1<-data.frame(x1,x2,x3) lapply(df1,mean)
輸出
如果您將以上所有程式碼片段作為單個程式執行,它將生成以下輸出:
$x1 [1] 0.3468422 $x2 [1] -0.3272999 $x3 [1] NA Warning message: In mean.default(X[[i]], ...) : argument is not numeric or logical: returning NA
示例 2
以下程式碼片段建立了一個示例資料框:
ID<-letters[1:20] Response<-rpois(20,5) df2<-data.frame(ID,Response) df2
建立了以下資料框:
ID Response 1 a 8 2 b 5 3 c 4 4 d 4 5 e 4 6 f 2 7 g 3 8 h 4 9 i 6 10 j 3 11 k 6 12 l 2 13 m 5 14 n 3 15 o 4 16 p 7 17 q 6 18 r 6 19 s 6 20 t 7
為了使用 apply 函式查詢 df2 中所有列的平均值,請將以下程式碼新增到上述程式碼片段中:
ID<-letters[1:20] Response<-rpois(20,5) df2<-data.frame(ID,Response) apply(df2,2,mean)
輸出
如果您將以上所有程式碼片段作為單個程式執行,它將生成以下輸出:
ID Response NA NA Warning messages: 1: In mean.default(newX[, i], ...) : argument is not numeric or logical: returning NA 2: In mean.default(newX[, i], ...) : argument is not numeric or logical: returning NA
為了使用 apply 函式查詢 df2 中所有列的平均值,請將以下程式碼新增到上述程式碼片段中:
ID<-letters[1:20] Response<-rpois(20,5) df2<-data.frame(ID,Response) lapply(df2,mean)
輸出
如果您將以上所有程式碼片段作為單個程式執行,它將生成以下輸出:
$ID [1] NA $Response [1] 4.75 Warning message: In mean.default(X[[i]], ...) : argument is not numeric or logical: returning NA
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP