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

如何用Tidyverse风格重写R语言双重循环的密度计算代码?

用Tidyverse重写的等效代码

以下是用tidyverse工具链(dplyr、tidyr)重写的代码,保留了原有的筛选逻辑,同时提升了可读性和代码效率:

library(tidyverse)

set.seed(123)
a_df <- data.frame(
  sample = sample(c("A","B", "C"), 50, replace=TRUE),
  type = paste0(sample(letters[1:3], 50, replace=TRUE), sample(letters[1:3],50, replace=TRUE)),
  area = sample(1:100, 50, replace=TRUE)
)
targets <- c("ab", "bb")

all_densities <- crossing(sample = unique(a_df$sample), target_type = targets) %>%
  left_join(a_df, by = "sample") %>%
  filter(grepl(target_type, type)) %>%  # 替换为你的自定义筛选函数即可
  group_by(sample, target_type) %>%
  summarise(
    density = n() / sum(area, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  rename(type = target_type)

代码说明:

  • crossing():生成所有sample与target的组合,替代原双重循环的遍历逻辑,确保每个分组都被覆盖
  • left_join():将组合表与原数据关联,保留所有需要计算的分组
  • filter():执行类型筛选,原代码的grep用grepl替代(返回逻辑向量更符合dplyr风格),直接替换成你的自定义筛选函数即可
  • group_by() + summarise():按sample和target分组计算密度,n()统计符合条件的行数,sum(area)计算对应面积总和
  • rename():统一列名,和原输出结构保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:15:45