You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中dplyr/tidyr如何在单个命令内多次调用summarize计算物种协方差

报错原因

summarise() 执行聚合操作后,仅会保留当前的分组列与本次计算生成的新列。你在链式调用中第一次执行summarise后,输出的结果只有month、site、covar.species1三列,原始数据中的abundance、species、abundance.covar等列已经被移除,后续调用summarise时自然找不到所需变量。

解决方案

最小修改方案

将四个物种的协方差计算全部放在同一次summarise调用中即可正常运行:

agg.cov <- df.long%>% 
  group_by(month,site)%>% 
  dplyr::summarise(
    covar.species1 = cor(abundance[species=="sp1"],abundance.covar[species.covar=="sp2.3.4"]),
    covar.species2 = cor(abundance[species=="sp2"],abundance.covar[species.covar=="sp3.4.1"]),
    covar.species3 = cor(abundance[species=="sp3"],abundance.covar[species.covar=="sp1.2.4"]),
    covar.species4 = cor(abundance[species=="sp4"],abundance.covar[species.covar=="sp1.2.3"])
  )%>%
  as.data.frame()

优化方案(推荐)

你无需提前手动构造求和列、也不需要将数据转成长格式,直接基于原始宽表计算逻辑更简洁、执行效率更高:

agg.cov <- df %>% 
  group_by(month, site) %>% 
  dplyr::summarise(
    covar.species1 = cor(sp1, sp2 + sp3 + sp4),
    covar.species2 = cor(sp2, sp1 + sp3 + sp4),
    covar.species3 = cor(sp3, sp1 + sp2 + sp4),
    covar.species4 = cor(sp4, sp1 + sp2 + sp3)
  ) %>% 
  as.data.frame()

内容的提问来源于stack exchange,提问作者Rspacer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:09:01