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

如何在R语言中提取数据框每行字符串的最常见单词?

按行提取R语言数据框字符串中最频繁元素的解决方案

首先给出原始数据框:

df <- data.frame(A = c("a, a, a, b, b, c, c", "a, a, b, b, b, b, c", "a, a, b, b"), B = c(3, 5, 8))

需求是:为变量A的每个观测值,提取以逗号分隔的字符串中出现频率最高的单词;若多个单词频率相同,需同时提取并用逗号分隔。

之前的代码错误地对整列所有元素统计频率,得到的是整列最常见的单词,无法按行处理,错误结果如下:

wrong_result <- data.frame(A = c("a, a, a, b, b, c, c", "a, a, b, b, b, b, c"), B = c(3, 5, 8), C = c("b", "b", "b"))

解决方案

方法1:基础R实现

定义一个处理单个字符串的函数,再用sapply按行应用:

# 定义函数:提取单个字符串中频率最高的元素(含并列情况)
get_most_freq <- function(s) {
  elements <- strsplit(s, ", ")[[1]]
  freq_table <- table(elements)
  max_freq <- max(freq_table)
  paste(names(freq_table[freq_table == max_freq]), collapse = ", ")
}

# 生成新列C
df$C <- sapply(df$A, get_most_freq)

方法2:tidyverse风格实现

如果习惯使用dplyr和purrr,可以用以下代码:

library(dplyr)
library(purrr)

df <- df %>%
  mutate(C = map_chr(A, function(s) {
    elements <- str_split(s, ", ")[[1]]
    freq_table <- table(elements)
    max_freq <- max(freq_table)
    paste(names(freq_table[freq_table == max_freq]), collapse = ", ")
  }))

运行后得到的期望结果:

result <- data.frame(A = c("a, a, a, b, b, c, c", "a, a, b, b, b, b, c", "a, a, b, b"), B = c(3, 5, 8), C = c("a", "b", "a, b"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:09:31