在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
相关产品推荐
相关产品推荐

