簡體   English   中英

使用行和列說明符計算三重平均值,忽略NA

[英]Calculate mean of triplicates using row and column specifier, ignore NAs

我想制作一個循環,該循環通過將行移動三個值並忽略缺失(NA)值來計算平均值。

這是我的示例,其中應計算a,b和c值的平均值以及x,y和z的平均值:

df <- data.frame(label=paste0("lab", 1:15), a=1:5, b=6:2, c=25:11,
                                     x=5:1, y=2:6, z=11:25, zz=NA)
df[,2]<-NA
df[1,]<-NA
df

而我遠遠不完整的解決方案:

res <- tapply(df[,2:4], df[,5:7], mean, na.rm=F)

預期結果:

head(res,3)
   label  a  b  c  x  y  z zz mean_abc mean_xyz
1   <NA> NA NA NA NA NA NA NA NA NA
2   lab2 NA  5 24  4  3 12 NA 9.7 6.3
> df$mean_abc <- rowMeans(df[ , c('a', 'b', 'c')], na.rm = TRUE)
> df
   label  a  b  c  x  y  z zz mean_abc
1   <NA> NA NA NA NA NA NA NA      NaN
2   lab2 NA  5 24  4  3 12 NA     14.5
3   lab3 NA  4 23  3  4 13 NA     13.5
4   lab4 NA  3 22  2  5 14 NA     12.5
5   lab5 NA  2 21  1  6 15 NA     11.5
6   lab6 NA  6 20  5  2 16 NA     13.0
7   lab7 NA  5 19  4  3 17 NA     12.0
8   lab8 NA  4 18  3  4 18 NA     11.0
9   lab9 NA  3 17  2  5 19 NA     10.0
10 lab10 NA  2 16  1  6 20 NA      9.0
11 lab11 NA  6 15  5  2 21 NA     10.5
12 lab12 NA  5 14  4  3 22 NA      9.5
13 lab13 NA  4 13  3  4 23 NA      8.5
14 lab14 NA  3 12  2  5 24 NA      7.5
15 lab15 NA  2 11  1  6 25 NA      6.5

我承認,到目前為止,這還不如@EDi的回答那么優雅和有效,但是這里有一個可能的tidyverse解決方案(我已將您的數據框命名為“ my_dat”)

require(dplyr) 
require(tidyr)

my_dat %>% gather(group1, value1, a:c) %>% 
           gather(group2, value2, x:z) %>%
           group_by(label) %>%
           summarise_at(vars(value1, value2), funs(mean), na.rm = TRUE)

# A tibble: 15 x 3
   label value1 value2
   <fct>  <dbl>  <dbl>
 1 lab10   9.00   9.00
 2 lab11  10.5    9.33
 3 lab12   9.50   9.67
 4 lab13   8.50  10.0 
 5 lab14   7.50  10.3 
 6 lab15   6.50  10.7 
 7 lab2   14.5    6.33
 8 lab3   13.5    6.67
 9 lab4   12.5    7.00
10 lab5   11.5    7.33
11 lab6   13.0    7.67
12 lab7   12.0    8.00
13 lab8   11.0    8.33
14 lab9   10.0    8.67
15 <NA>  NaN    NaN   

我不喜歡雙重聚集步驟,並且肯定會有一些改進。 但這給出了行的平均值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM