R语言使用dplyr按站点统计首次出现的因子新水平数
基于dplyr的实现方案
核心逻辑为:先将多列颜色数据转为长格式统一处理,按站点顺序保留每个颜色第一次出现的记录,再统计每个站点的首次出现颜色数量,补全无新增颜色的站点计数。
library(dplyr) library(tidyr) # 计算每个站点的新增颜色数 new_color_stat <- d %>% # 把color1、color2列转为长格式,统一统计颜色 pivot_longer(cols = starts_with("color"), values_to = "color") %>% # 按站点从小到大排序 arrange(site) %>% # 每个颜色仅保留第一次出现的记录 distinct(color, .keep_all = TRUE) %>% # 统计每个站点首次出现的颜色数量 count(site, name = "new_color_count") %>% # 补全所有站点,无新增的站点计数设为0 right_join(tibble(site = unique(d$site)), by = "site") %>% mutate(new_color_count = tidyr::replace_na(new_color_count, 0)) %>% arrange(site) # 如需把统计结果合并回原始数据集,可执行以下代码 d_with_stat <- d %>% left_join(new_color_stat, by = "site")
运行上述代码得到的统计结果如下:
| site | new_color_count |
|---|---|
| 1 | 2 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
内容的提问来源于stack exchange,提问作者jlopez
相关产品推荐
相关产品推荐

