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

在R语言中为已有DataFrame添加qdap生成的同义词列

解决R中qdap同义词列表转数据框列的问题

首先,先重现你的原始数据框:

df <- data.frame(
  `Sl NO` = 1:5,
  Word = c("get", "Free", "Joshi", "Hello", "New"),
  stringsAsFactors = FALSE
)

接下来,加载qdap并获取同义词列表:

library(qdap)
syn_list <- synonyms(df$Word)

现在要把这个列表转换成你需要的Syn1、Syn2列,核心是处理每个单词的同义词向量,统一成固定列数(这里是2列)的结构,不足的用NA填充,再和原数据框合并。下面提供两种方法:

方法一:Base R实现

# 把同义词列表转成带Syn1、Syn2的数据框
syn_df <- do.call(rbind, lapply(syn_list, function(x) {
  if (length(x) == 0) {
    data.frame(Syn1 = NA, Syn2 = NA, stringsAsFactors = FALSE)
  } else {
    data.frame(
      Syn1 = if (length(x) >= 1) x[1] else NA,
      Syn2 = if (length(x) >= 2) x[2] else NA,
      stringsAsFactors = FALSE
    )
  }
}))

# 合并原始数据和同义词数据
result_df <- cbind(df, syn_df)

方法二:Tidyverse实现(更简洁)

如果你习惯用tidyverse系列包,可以这样写:

library(tidyverse)

# 处理同义词列表,生成Syn1、Syn2列
syn_tibble <- syn_list %>%
  map_dfr(function(x) {
    tibble(
      Syn1 = x[1] %||% NA_character_,
      Syn2 = x[2] %||% NA_character_
    )
  })

# 合并数据框
result_df <- bind_cols(df, syn_tibble)

最后查看结果,就会得到你想要的格式:

print(result_df)
#   Sl NO    Word      Syn1     Syn2
# 1     1     get    obtain  receive
# 2     2    Free independent     <NA>
# 3     3   Joshi       <NA>     <NA>
# 4     4   Hello  Greeting     <NA>
# 5     5     New    unused     fresh

说明一下:像"Joshi"这类没有同义词的词汇,会自动填充NA;如果某个单词的同义词超过2个,这里只取前两个,要是需要更多列,只需要在代码里增加Syn3、Syn4这类的逻辑就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:55:41