【问题标题】:Looping through columns and dataframes to aggregate data in R循环遍历列和数据框以聚合 R 中的数据
【发布时间】:2019-03-07 21:36:16
【问题描述】:

我正在尝试对几列中的值求和,并在多个数据帧中重复此过程。我在 for 循环之外运行了聚合函数,它产生了预期的结果。

但是,在 for 循环中,尝试循环遍历数据帧时出现错误“找不到对象”,尝试遍历列名时出现错误“可变长度不同”。关于如何解决其中一个或两个错误的任何建议?有没有更好的方法来完全做到这一点?我已经广泛浏览了论坛,以前的建议都没有解决这个问题。感谢阅读!

for (i in colnames(m)){
n <- paste("m", i, sep = "")
n <- aggregate(
i~key + plot + blk + trt + field + timepoint + time_code, 
data=m, FUN = sum)
}

ilist <- list(m, d, ss, seg)
for (i in 1:length(ilist)){
n <- paste(i, sep = "")
n <- aggregate(
stems~key + plot + blk + trt + field + timepoint + time_code, 
data=i, FUN = sum)
}

【问题讨论】:

    标签: r dataframe for-loop aggregate


    【解决方案1】:

    在这一行:

    stems~key + plot + blk + trt + field + timepoint + time_code, data=i, FUN = sum)
    

    您正在将数据设置为循环的索引。你需要做的:

    stems~key + plot + blk + trt + field + timepoint + time_code, data=ilist[i], FUN = sum)
    

    我不确定这是否能解决您的所有问题。至于您关于是否有更好的方法的其他问题-也许看看lapply

    【讨论】:

    • 谢谢!我仍然收到“找不到对象错误”,所以其他地方肯定有问题。该代码仍然在循环之外工作。我也会研究 lapply。
    【解决方案2】:

    您似乎使用的是其他语言的 for 循环中的规则,而不是 R 的特定规则。

    我会重写你的代码(尽管,记住,我没有看到你的数据):

    nameList <- colnames(m)    
    for (i in length(nameList)){
      n <- paste(nameList[m], i, sep = "")
      n <- aggregate(
        i~key + plot + blk + trt + field + timepoint + time_code, 
        data=nameList[m], FUN = sum)
    }
    
    ilist <- list(m, d, ss, seg)
    for (i in 1:length(ilist)){
      n <- paste(ilist[i], sep = "")
      n <- aggregate(
        stems~key + plot + blk + trt + field + timepoint + time_code, 
        data=ilist[i], FUN = sum)
    }
    

    【讨论】:

    • 谢谢!我是 R 中 for 循环的新手,所以我很欣赏语法说明。使用您的代码仍会返回“找不到对象”,因此其他地方肯定有问题。代码确实在循环之外工作,所以我很困惑。
    • 您可能必须将data=nameList[m] 更改为不同的东西。但是,由于不熟悉您的数据,我不知道您需要将其更改为什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多