【发布时间】:2019-10-08 20:53:16
【问题描述】:
我试试
-为我的数据框“alpha”计算从第 2 列到第 11 列每一行的平均值
-将结果添加到我的数据框“alpha”的第 12 列中,该列当前具有“NA”值
第 1 列是“locs”
-
我的 df:
[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10][,11][,12]...[,17] [1,] A1 5 9 4 8 12 4 8 12 4 8 NA NA [2,] C3 6 10 4 8 12 4 8 12 4 8 NA NA [3,] P2 7 11 5 6 10 5 6 10 5 6 NA NA [4,] 4 8 12 5 6 10 5 6 10 5 6 NA NA [49,] 4 8 12 5 6 10 5 6 10 5 6 NA NA
我对 R 不是很熟悉,也不明白问题所在。
这是我尝试过的两个不同的 for 循环和警告消息:
> for (j in 1:49){
+ alpha[j, 12] <- mean(alpha[j,2:11])
+ }
There were 49 warnings (use warnings() to see them)
>
> for (j in 1:length(locs)) {
+ alpha$mean[j] <- mean(alpha[j,2:11])
+ }
There were 49 warnings (use warnings() to see them)
>
> warnings()
Warnmeldungen:
1: In mean.default(alpha[j, 2:11]) :
Argument ist weder numerisch noch boolesch: gebe NA zurück
2: In mean.default(alpha[j, 2:11]) :
Argument ist weder numerisch noch boolesch: gebe NA zurück
data.frame': 49 obs. of 17 variables:
$ locs: Factor w/ 49 levels "A1","C3",..: 1 2 3 4 5 6 7 8 9 10 ...
$ sum.2009 : num 12 11 12 15 22 18 14 18 8 9 ...
$ sum.2010 : num 14 11 13 18 22 21 15 21 16 17 ...
$ sum.2011 : num 15 12 20 18 26 25 22 18 25 14 ...
$ sum.2012 : num 15 13 17 25 24 20 24 28 26 20 ...
$ sum.2013 : num 14 9 21 21 28 20 14 19 23 21 ...
$ sum.2014 : num 21 16 28 24 32 26 19 22 7 12 ...
$ sum.2015 : num 27 27 31 23 17 6 14 26 19 19 ...
$ sum.2016 : num 18 18 14 23 25 22 24 39 32 15 ...
$ sum.2017 : num 18 18 23 35 22 7 12 27 15 16 ...
$ sum.2018 : num 25 23 25 26 20 11 12 13 7 8 ...
$ mean : num NA NA NA NA NA NA NA NA NA NA ...
然后我使用以下方法将“locs”从因子转换为数字:
alpha$locs <- as.numeric(alpha$locs)
alpha$locs <- lapply(alpha$locs , as.numeric)
两者都有效,但运行后我仍然收到相同的错误消息 for 循环。
【问题讨论】:
-
不要使用
for loop,而是考虑使用rowMeans,例如rowMeans(alpha[, 2:11])。它要快得多。警告还告诉您某些列不是数字的。