【问题标题】:for loop through a list of data frames and save results in new data framefor 循环遍历数据框列表并将结果保存在新数据框中
【发布时间】:2013-01-28 12:40:21
【问题描述】:

我想从数据框列表中提取一些值并将结果保存在新的数据框中。这就是我的代码的样子:

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)的汇总变量。然后我想创建一个新的 data.frame 来存储所有汇总值(5 列和 i 行)。

有人可以帮帮我吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    一种方法是将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”
    • Arun 有您问题的确切答案。在集合上使用“lapply”然后绑定将做你想要的。不过,我有一种感觉,这可以通过备份几个步骤并以不同方式排列数据来更简单地完成。这感觉就像应该使用“plyr”、“data.table”甚至“SPARQL”之类的聚合包来完成的事情。
    猜你喜欢
    • 2021-07-29
    • 2018-07-06
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多