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

如何在dplyr管道中生成词数的频率统计汇总(适配bigrquery)

解决方案:用dplyr管道实现词数频率统计(含BigQuery适配)

针对你的需求,我们可以通过完整的dplyr管道实现从文本列到指定词数范围(0到6)的频率统计,同时兼容本地数据和BigQuery查询场景。

本地数据场景(示例数据测试)

先基于你提供的示例数据,用dplyr+stringr完成统计:

library(dplyr)
library(stringr)

# 示例数据
tf1 <- tibble(
  row = 1:5,
  body = c("tt t ttt j ss oe", "kpw eero", "pow eir sap r", "s", "oe")
)

# 核心管道代码
word_freq_result <- tf1 %>%
  # 1. 计算每行的词数:按空格分割后取长度,空文本会返回0
  mutate(n_words = str_split(body, "\\s+") %>% map_int(length)) %>%
  # 2. 统计每个词数的出现频率
  count(n_words, name = "freq") %>%
  # 3. 关联完整的词数序列(0到6),确保所有目标词数都被包含
  right_join(tibble(n_words = 0:6), by = "n_words") %>%
  # 4. 将未出现的词数频率替换为0
  mutate(freq = replace_na(freq, 0)) %>%
  # 5. 按词数排序,匹配期望结果的顺序
  arrange(n_words)

# 输出结果
word_freq_result

运行后会得到你期望的结果:

# A tibble: 7 × 2
  n_words  freq
    <int> <int>
1       0     0
2       1     2
3       2     1
4       3     0
5       4     1
6       5     0
7       6     1

步骤解释:

  • 词数计算:用str_split按空格分割文本,map_int(length)提取每个分割结果的长度,精准得到每行的词数;如果遇到空文本,会自动返回0,符合需求。
  • 频率统计:count()函数直接统计每个词数的出现次数,重命名为freq。
  • 补全词数序列:通过right_join关联我们预设的0-6词数序列,确保没有出现的词数也能被纳入结果。
  • NA替换:用replace_na()把未匹配到的词数频率从NA转为0,贴合统计要求。
  • 排序:arrange()确保结果按词数从小到大排列,和预期输出一致。

BigQuery场景适配

如果是通过bigrquery在云端查询,需要用BigQuery兼容的SQL函数替换本地字符串处理逻辑,核心管道调整如下:

library(dplyr)
library(bigrquery)

# 假设已建立BigQuery连接(con为连接对象)
# tf1 <- tbl(con, "your_dataset.your_target_table")

bq_word_freq_result <- tf1 %>%
  # 1. BigQuery用REGEXP_COUNT统计词数:匹配非空白字符的次数
  mutate(n_words = REGEXP_COUNT(body, r"(\S+)")) %>%
  # 2. 统计频率
  count(n_words, name = "freq") %>%
  # 3. 在BigQuery端生成0-6的词数序列(更高效)
  right_join(
    tbl(con, sql("SELECT n_words FROM UNNEST(GENERATE_ARRAY(0, 6)) AS n_words")),
    by = "n_words"
  ) %>%
  # 4. BigQuery用IFNULL替换NA为0
  mutate(freq = IFNULL(freq, 0)) %>%
  # 5. 排序并拉取结果到本地
  arrange(n_words) %>%
  collect()

关键适配点:

  • 词数计算用BigQuery的REGEXP_COUNT函数,\\S+匹配连续非空白字符,直接统计词数,比分割后取长度更高效。
  • 词数序列直接在BigQuery端用GENERATE_ARRAY生成,避免本地数据传输,提升查询效率。
  • 用BigQuery的IFNULL函数替换NA,符合云端SQL的语法规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:40