数据帧中按组的每个第N列的平均值

时间:2015-07-14 11:49:17

标签: r dataframe

我有一个data.frame列表。我在每个df中平均每n天。

我正试图在我的名单上讨论。

test<-lapply(dataframe_list, function(d){ n <- 14 aggregate(d,list(rep(1:(nrow(d)%/%n+1),each=n,len=nrow(d))),mean)[-1] d } )

但我收到警告:

警告讯息: 1:在mean.default(X [[1L]],...)中:   参数不是数字或逻辑:返回NA 2:在mean.default(X [[2L]],...)中:   参数不是数字或逻辑:返回NA 3:在mean.default(X [[3L]],...)中:   参数不是数字或逻辑:返回NA

以下是列表中df之一的head(df)结果:

KGID 3MEHIS ACE_POT ADD_SUG_AVAIL_CHO ADD_SUG_TOT_SUG ALA ALCOHOL PROTEIN_AN 1 KGID 0 0 3.135 0 1.848 0 24.181 2 KGID 0 0 3.135 0 1.848 0 24.181 3 KGID 0 0 3.135 0 1.848 0 24.181 4 KGID 0 0 3.135 0 1.848 0 24.181 5 KGID 0 0 3.135 0 1.848 0 24.181 6 KGID 0 0 3.135 0 1.848 0 24.181

最终,我想看到这个df的前14行的平均值,当然第一列不能有平均值。这是我的问题吗?

1 个答案:

答案 0 :(得分:0)

警告消息表明您在mean计算中包含了非数字列。在显示的示例中,它是第一个非数字列。我们可以在d1[-1]之前删除第一列,然后创建一个新的分组列(&#39; grp&#39;)并使用aggregate中的公式方法来获取“#mean”&#39; ;。通常,如果有许多非数字列,我们可以创建一个逻辑条件(sapply(d1, is.numeric))来仅使用数字列对数据集进行子集化。

 n <- 14
 aggregate(.~grp, transform(d1[sapply(d1, is.numeric)],
       grp= as.numeric(gl(nrow(d1), n, nrow(d1)))), 
              FUN=mean, na.rm=TRUE, na.action=NULL)
 #   grp X3MEHIS ACE_POT ADD_SUG_AVAIL_CHO ADD_SUG_TOT_SUG   ALA ALCOHOL
 #1   1       0       0             3.135               0 1.848       0
 #  PROTEIN_AN
 #1     24.181

对于数据框列表,我们可以使用lapply循环相同的代码。

 lapply(dataframe_list, function(d) aggregate(.~grp, 
       transform(d[sapply(d, is.numeric)],
            grp= as.numeric(gl(nrow(d), n, nrow(d)))),
              FUN=mean, na.rm=TRUE, na.action=NULL))