我有一个数据框列表,如果其他功能通过列表应用,我想申请
df1= data.frame(letter=LETTERS[1:5], res=runif(10), cens=rep(0:1,5))
df2= data.frame(letter=LETTERS[1:5], res=runif(10), cens=rep(0,5))
df3= data.frame(letter=LETTERS[1:5], res=runif(10), cens=rep(0:1,5))
df4= data.frame(letter=LETTERS[1:5], res=runif(10), cens=rep(0,5))
df.list=list(df1,df2,df3,df4)
reg.stats = function(var1){
gm.reg=exp(mean(log(var1)))
gsd.reg=exp(sd(log(var1)))
return(c(gm.reg,gsd.reg))
}
other.stats = function(obs,cens){
nondetects <- obs[cens==1]
detects <- obs[cens== 0]
gm.other=exp(mean(log(detects)))
gsd.other=exp(sd(log(detects)))
return(c(gm.other,gsd.other))
}
我想遍历每个 df,如果单个 df = 0(即 df2)中 cens 变量的总和,则应用 reg.stats 函数,否则应用 other.stats 函数。
在真实的数据集中,我有一个 50+ dfs 的列表,我过去所做的是手动挑选出所有 cens = 0 的 dfs 并使用 lapply 函数。没关系,但是如果我分离数据框并为每个列表使用单独的 lapply 然后合并结果,则顺序会更改,然后我需要重新排序结果。有没有更快、更清洁的方法来做到这一点?
uncens.list = df.list[c(2,4)]
uncens.res= lapply(uncens.list, function(i) reg.stats(i$res))
cens.list = df.list[c(1,3)]
cens.res.=lapply(cens.list,function(i) other.stats(i$res,i$cens))