请求协助:按入侵状态分别统计各国白千层记录数并排序
解决方案:按入侵状态统计各国白千层记录数并排序
用R处理的步骤(适配50万条大数据)
1. 安装并加载必要工具包
如果还没安装tidyverse(处理数据的核心包),先执行:
install.packages("tidyverse")
加载包:
library(tidyverse)
2. 读取CSV数据
用read_csv高效读取大文件:
data <- read_csv("Glonaffinal2.csv")
3. 统计排序并拆分结果
以下代码会一次性完成三种入侵状态的统计,再拆分出各自的排序结果:
# 筛选目标状态、分组统计、排序 country_counts <- data %>% filter(invasion_status %in% c("introduced", "naturalized", "invasive")) %>% group_by(invasion_status, country) %>% summarize(record_count = n(), .groups = "drop") %>% arrange(invasion_status, desc(record_count)) # 拆分三种状态的结果 introduced_rank <- country_counts %>% filter(invasion_status == "introduced") %>% select(country, record_count) naturalized_rank <- country_counts %>% filter(invasion_status == "naturalized") %>% select(country, record_count) invasive_rank <- country_counts %>% filter(invasion_status == "invasive") %>% select(country, record_count) # 查看结果 introduced_rank naturalized_rank invasive_rank # (可选)导出结果到CSV文件,方便后续查看 write_csv(introduced_rank, "introduced_country_rank.csv") write_csv(naturalized_rank, "naturalized_country_rank.csv") write_csv(invasive_rank, "invasive_country_rank.csv")
注意事项
- 请确认CSV中存储入侵状态的列名是
invasion_status,如果实际列名不同(比如status),请替换代码中对应的字段名 - 若处理50万条记录时遇到内存瓶颈,推荐用
data.table包优化速度和内存占用,代码如下:
install.packages("data.table") library(data.table) data <- fread("Glonaffinal2.csv") country_counts <- data[invasion_status %in% c("introduced", "naturalized", "invasive"), .(record_count = .N), by = .(invasion_status, country)] %>% setorder(-record_count) # 拆分结果方式类似 introduced_rank <- country_counts[invasion_status == "introduced", .(country, record_count)]
内容的提问来源于stack exchange,提问作者Michele ter Huurne
相关产品推荐
相关产品推荐

