我有一个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行的平均值,当然第一列不能有平均值。这是我的问题吗?
答案 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))