如何在 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