可以按如下步骤进行操作:

  1. 定义向量列vanishvarity,初始值为0。
vanishvarity <- rep(0, nrow(df_biodiv))
  1. 使用dplyr按Year分组,计算每个CropName的总Area,并将结果保存到新的数据框df_sum中。
library(dplyr)
df_sum <- df_biodiv %>%
  group_by(Year, CropName) %>%
  summarise(TotalArea = sum(Area))
  1. 计算当年每个CropName总Area小于5的CropName数量,并将结果保存到vanishvarity中。
for (i in unique(df_biodiv$Year)) {
  df_temp <- df_sum %>%
    filter(Year == i) %>%
    group_by(CropName) %>%
    summarise(TotalArea = sum(TotalArea))
  vanishvarity[df_biodiv$Year == i & df_biodiv$CropName %in% df_temp$CropName[df_temp$TotalArea < 5]] <- length(unique(df_temp$CropName[df_temp$TotalArea < 5]))
}

解释一下上述代码的逻辑:

  • 首先使用for循环遍历每个年份;
  • 然后使用filter函数筛选出当前年份的数据,并按CropName分组计算总Area;
  • 接着使用summarise函数计算每个CropName的总Area,并筛选出总Area小于5的CropName;
  • 最后使用length函数计算小于5的CropName数量,并将结果保存到vanishvarity中。

注意事项:

  • 上述代码未考虑当年不存在小于5的CropName的情况,需要根据实际情况进行调整;
  • 上述代码使用了for循环,效率可能较低,可以考虑使用dplyr的group_map函数进行优化

原文地址: https://www.cveoy.top/t/topic/dwMm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录