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

在R中按id_municipio和year分组统计非零运营商数量

需求描述
  • 现有数据集如下:
id_municipio  year  Vivo  Claro   TIM     Oi Algar Sercomtel  MVNO
         <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl>     <dbl> <dbl>
1      1100015  2009  65.4  13.0   28.2   90.8     0         0     0
2      1100023  2009 775.  154.   334.  1076.      0         0     0
3      1100031  2009  35.2   6.98  15.2   48.8     0         0     0
4      1100049  2009 634.  126.   273.   880.      0         0     0
5      1100056  2009 122.   24.2   52.6  169.      0         0     0
6      1100064  2009 135.   26.7   58.2  187.      0         0     0
  • 要求:按id_municipio和year分组,新增Providers列,统计每组中除分组列外数值大于0的列的数量。
  • 预期输出(注:预期中Providers列数值疑似笔误,实际应为4):
id_municipio  year  Vivo  Claro   TIM     Oi Algar Sercomtel  MVNO total Providers
         <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl>     <dbl> <dbl> <dbl>     <dbl>
1      1100015  2009  65.4  13.0   28.2   90.8     0         0     0  197.         0
2      1100023  2009 775.  154.   334.  1076.      0         0     0 2339.         0
3      1100031  2009  35.2   6.98  15.2   48.8     0         0     0  106.         0
4      1100049  2009 634.  126.   273.   880.      0         0     0 1912.         0
5      1100056  2009 122.   24.2   52.6  169.      0         0     0  368.         0
6      1100064  2009 135.   26.7   58.2  187.      0         0     0  407.         0
  • 已有部分dplyr代码,需补充mutate中的逻辑:
library(dplyr)
dataset %>% group_by(id_municipio, year) %>% mutate(Providers =...)
解决方案

可以用rowSums()结合across()实现需求,完整代码如下:

library(dplyr)

dataset %>% 
  group_by(id_municipio, year) %>% 
  mutate(
    # 排除分组列,统计数值大于0的列数
    Providers = rowSums(across(-c(id_municipio, year), ~.x > 0)),
    # 可选:添加total列(对应预期输出中的求和列)
    total = rowSums(across(-c(id_municipio, year)))
  )

代码解释

  • across(-c(id_municipio, year)):选中除分组列之外的所有列;
  • ~.x > 0:对每一列的每个元素判断是否大于0,返回布尔值(TRUE/FALSE);
  • rowSums():将每行的布尔值转化为数值(TRUE=1,FALSE=0)后求和,得到每行中数值大于0的列的数量;
  • total列是可选的,对应预期输出中的求和列,若不需要可删除该行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:10:27