通过循环遍历数据框列表并将结果保存在新的数据框中

3

我想从一个数据帧列表中获取一些值,并将结果保存在新的数据帧中。代码如下:

for (i in 1:length(covpatient)){

    a <- names(covpatient[i])
    b <- sum(covpatient[[i]]$cov == 0)
    c <- sum(covpatient[[i]]$cov > 0 & covpatient[[i]]$cov <= 40)
    d <- sum(covpatient[[i]]$cov > 40 & covpatient[[i]]$cov <= 100)
    e <- sum(covpatient[[i]]$cov > 100)
    summary <- c(a,b,c,d,e)

对于covpatient列表中的每个数据框,我想创建一个包含5个元素(a,b,c,d,e)的汇总变量。然后,我想创建一个新的数据框,存储所有汇总值(5列&i行)。请问有人能帮帮我吗?
1个回答

4
一种方法是使用lapplyrbind,然后调用as.data.frame。由于没有数据可供使用,我将给出一般思路。
o <- lapply(1:length(covpatient), function(i) {
    a <- names(covpatient[i])
    b <- sum(covpatient[[i]]$cov == 0)
    c <- sum(covpatient[[i]]$cov > 0 & covpatient[[i]]$cov <= 40)
    d <- sum(covpatient[[i]]$cov > 40 & covpatient[[i]]$cov <= 100)
    e <- sum(covpatient[[i]]$cov > 100)
    c(a,b,c,d,e)
})
out <- as.data.frame(do.call(rbind, o))

是的,我理解。但是当我尝试运行它时,它显示:“在“out”中出现了意外符号错误”。 - user1987607
1
Arun对你的问题有确切的答案。使用'lapply'覆盖集合,然后绑定将实现你想要的效果。不过我有一种感觉,通过倒退几步并以不同的方式排列数据,这个问题可能可以更简单地解决。这似乎是应该使用聚合包,如'plyr'、'data.table'或甚至'SPARQL'来完成的事情。 - Dinre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接