对于具有特定数量的 NA 或根本没有 NA 的变量,如何从 R 中的数据框计算均值?

How to calculate means from data frame in R for a variable with specific amount of NAs or not NAs at all?

所以我在表格中有很多数据(每天 4 个值)

  date       var1      var2 
1  2003-10-28    1.2       970     
2  2003-10-28     NA       510     
3  2003-10-28     NA       640     
4  2003-10-28     NA       730     
5  2003-10-30    2.0       570     
6  2003-10-30     NA       480     
7  2003-10-30    1.2       580     
8  2003-10-30    1.2       297     
9  2002-05-07    3.0       830     
10 2002-05-07    4.8       507     
11 2002-05-07    4.8       253     
12 2002-05-07     NA       798     

并且我需要每天计算 var1 的总和,例如,如果该特定日期的 NA 值(或 none)少于 2 个,则应忽略该日期。同时,如果还计算了 var1 的总和,我应该计算相同日期的 var2 的均值。然后我应该将这些平均值、总和和日期保存到另一个数据框中,这样那些被忽略的日期就不会存在了。

我尝试了各种循环结构,但我对必须为根本没有 NA 的日期计算均值和总和这一事实感到困惑。保存日期、平均值和总和也让我陷入困境,因为我不知道如何正确地进行索引。

因此此样本数据的预期输出应如下所示

  date      sum(var1)  mean(var2)
1 2003-10-30    4.8         480.75
2 2002-05-07    17.4        561.75

使用dplyr。假设您的原始数据集是 df

library(dplyr)
df %>% group_by(date) %>% filter(sum(is.na(var1)) <= 2)%>% summarise(Sum = sum(var1, na.rm = T), Mean = mean(var2, na.rm = T))

数据

df <- read.table(text = "         date var1 var2
1  2003-10-28  1.2  970
2  2003-10-28   NA  510
3  2003-10-28   NA  640
4  2003-10-28   NA  730
5  2003-10-30  2.0  570
6  2003-10-30   NA  480
7  2003-10-30  1.2  580
8  2003-10-30  1.2  297
9  2002-05-07  3.0  830
10 2002-05-07  4.8  507
11 2002-05-07  4.8  253
12 2002-05-07   NA  798",header =TRUE)

输出

Source: local data frame [2 x 3]

    date   Sum   Mean
  (date) (dbl)  (dbl)
1 2002-05-07  12.6 597.00
2 2003-10-30   4.4 481.75

这是 data.table 的选项。将'data.frame'转换为'data.table'(setDT(df1)),按'date'分组if'var1'中的NA值个数小于3,则得到 'var1' 的 sum 和 'var2' 的 mean

library(data.table)
setDT(df1)[,if(sum(is.na(var1)) < 3) .(Sum = sum(var1, na.rm=TRUE), 
           Mean = mean(var2, na.rm=TRUE)) , by = date]
#          date  Sum   Mean
#1: 2003-10-30  4.4 481.75
#2: 2002-05-07 12.6 597.00