我想在列之间匹配相似的单词

Mic*_*len 9 r matching

1.0 2.0 3.0
大声 抱怨 问题
疼痛 压力 使困惑
乏味的 疼痛 压力

这是我的数据集,我想重新组织行,以便如果每列中出现一个单词,它就会转移到相应的行。例如

1.0 2.0 3.0
大声 不适用 不适用
疼痛 疼痛 不适用
乏味的 不适用 不适用
不适用 抱怨 不适用
不适用 压力 压力
不适用 不适用 使困惑
不适用 不适用 问题

等等,这样每个单词都有自己的行,如果该行中的单词出现在该列中,它就会与其他列匹配

我一直在寻找如何做到这一点,但找不到好的代码。我得到的一个想法是创建所有出现的单词的列表,然后尝试将它们与每一列匹配,但仍然没有找到这方面的代码。

akr*_*run 8

我们可以使用matchin -从ed 数据中base R获取元素作为 a ,循环遍历列,获取匹配元素的索引以及匹配元素的索引,并在处理长度后转换为 data.frameuniqueunlistvectorreplace

v1 <- unique(unlist(df1))
lst1 <- lapply(df1, \(x) 
   {i1 <- match(x, v1)
   replace(rep(NA, max(i1)), i1, v1[i1])
 })
list2DF(lapply(lst1, `length<-`, max(lengths(lst1))))
 1.0       2.0      3.0
1 loud      <NA>     <NA>
2 pain      pain     <NA>
3 dull      <NA>     <NA>
4 <NA> complaint     <NA>
5 <NA>    stress   stress
6 <NA>      <NA> problems
7 <NA>      <NA> confused
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- structure(list(`1.0` = c("loud", "pain", "dull"), `2.0` = c("complaint", 
"stress", "pain"), `3.0` = c("problems", "confused", "stress"
)), class = "data.frame", row.names = c(NA, -3L))

Run Code Online (Sandbox Code Playgroud)