使用dplyr 计算数据框中每个作物总面积小于5的作物数量
本文介绍如何使用dplyr包对数据框df_biodiv进行操作,计算每个年份中每个作物总面积小于5的作物数量。数据框df_biodiv包含Year、Area和CropName列。
步骤
- 定义向量列vanishvarity,初始值为0。
vanishvarity <- rep(0, nrow(df_biodiv))
- 使用dplyr按Year分组,计算每个CropName的总Area,并将结果保存到新的数据框df_sum中。
library(dplyr)
df_sum <- df_biodiv %>%
group_by(Year, CropName) %>%
summarise(TotalArea = sum(Area))
- 计算当年每个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/nIrO 著作权归作者所有。请勿转载和采集!