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

如何在R语言中按plot分组,基于species条件对value列求和生成新数据框?

按地块计算阔叶树与针叶树的Value总和

方法一:直接分组条件求和(最简洁)

利用dplyr的分组和条件索引直接计算总和:

library(dplyr)

df1 <- df %>%
  group_by(plot) %>%
  summarize(
    # 计算阔叶树(Fagus、Quercus)的value总和
    share.broadleaves = sum(value[species %in% c("Fagus", "Quercus")]),
    # 计算针叶树(Abies、Picea)的value总和
    share.conifers = sum(value[species %in% c("Abies", "Picea")])
  )

# 查看结果
print(df1)

方法二:结合case_when分类后聚合(贴合你的思路)

先通过case_when标记树种类型,再分组求和并转换格式:

library(dplyr)
library(tidyr) # 需要用到pivot_wider

df1 <- df %>%
  # 标记每个树种的类型
  mutate(
    tree_type = case_when(
      species %in% c("Fagus", "Quercus") ~ "broadleaves",
      species %in% c("Abies", "Picea") ~ "conifers",
      TRUE ~ NA_character_ # 处理未定义的树种
    )
  ) %>%
  # 按地块和树种类型分组求和
  group_by(plot, tree_type) %>%
  summarize(total_value = sum(value)) %>%
  # 将行转换为列,得到目标结构
  pivot_wider(names_from = tree_type, values_from = total_value, names_prefix = "share.")

print(df1)

原代码的问题说明

  • 管道操作中必须使用dplyr的动词(如summarize/mutate),不能直接赋值新列
  • 逻辑判断要用==(等于)、|(或),而非=、or
  • case_when是用来生成分类列的工具,不能直接指定FUN="sum",聚合操作需要配合summarize完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:30:47