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

如何批量计算R中各政党提及不同移民群体的帖子占比?

高效计算各政党提及不同移民群体的帖子占比

问题背景

我正在使用R开展一项研究,分析某国各政党发布移民相关内容的频率。数据中有一列标记帖子是否提及移民(取值为'Yes'或'No'),若标记为'Yes',则另一列会注明提及的具体移民群体。

已算出各政党发布的移民相关帖子占其所有帖子的百分比,现在希望一次性计算各政党提及'Immigrants'、'Higher-paid workers'、'Migrant workers'、'Domestic workers'这四类移民群体的帖子占比,无需逐个计算。

现有代码:

  • 计算各政党移民相关帖子占比:
sg_percent_all <- sg_parties %>%
                  group_by(party_name) %>%
                  summarise(prop = (sum(migration == "Yes")/ n())*100)
  • 单个群体占比计算:
sg_parties %>%
  group_by(party_name) %>%
  summarise(prop = (sum(migrant_grp == "Immigrants")/ n())*100)

解决方案

方法1:用across一次性生成多列结果

利用dplyr的across函数,批量遍历指定的四类移民群体,一次性计算每个群体的帖子占比,同时可保留总移民相关帖子的占比:

sg_percent_groups <- sg_parties %>%
  group_by(party_name) %>%
  summarise(
    # 总移民相关帖子占比
    prop_total_migration = (sum(migration == "Yes") / n()) * 100,
    # 批量计算四类群体的占比
    across(
      .cols = c("Immigrants", "Higher-paid workers", "Migrant workers", "Domestic workers"),
      .fns = ~ (sum(migrant_grp == .x, na.rm = TRUE) / n()) * 100,
      .names = "prop_{.col}"
    )
  )
  • na.rm = TRUE:处理migration为'No'时migrant_grp可能为空(NA)的情况,避免计算出错。
  • .names = "prop_{.col}":自动生成列名,比如prop_Immigrants、prop_Higher-paid workers。

方法2:整理成长格式(适合可视化/后续分析)

如果需要将结果转换为每行对应一个政党+一个移民群体的长格式,方便后续做分组图表或统计,可以结合pivot_longer:

sg_percent_long <- sg_parties %>%
  group_by(party_name) %>%
  summarise(
    prop_total_migration = (sum(migration == "Yes") / n()) * 100,
    prop_Immigrants = (sum(migrant_grp == "Immigrants", na.rm = TRUE) / n()) * 100,
    prop_Higher_paid_workers = (sum(migrant_grp == "Higher-paid workers", na.rm = TRUE) / n()) * 100,
    prop_Migrant_workers = (sum(migrant_grp == "Migrant workers", na.rm = TRUE) / n()) * 100,
    prop_Domestic_workers = (sum(migrant_grp == "Domestic workers", na.rm = TRUE) / n()) * 100
  ) %>%
  pivot_longer(
    cols = starts_with("prop_") & !prop_total_migration,
    names_to = "migrant_group",
    values_to = "percentage",
    names_prefix = "prop_"
  )

转换后的数据结构示例:

party_nameprop_total_migrationmigrant_grouppercentage
政党A25.0Immigrants10.0
政党A25.0Higher_paid_workers5.0
............

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:42:41