| 1.0 | 2.0 | 3.0 |
|---|---|---|
| 大声 | 抱怨 | 问题 |
| 疼痛 | 压力 | 使困惑 |
| 乏味的 | 疼痛 | 压力 |
这是我的数据集,我想重新组织行,以便如果每列中出现一个单词,它就会转移到相应的行。例如
| 1.0 | 2.0 | 3.0 |
|---|---|---|
| 大声 | 不适用 | 不适用 |
| 疼痛 | 疼痛 | 不适用 |
| 乏味的 | 不适用 | 不适用 |
| 不适用 | 抱怨 | 不适用 |
| 不适用 | 压力 | 压力 |
| 不适用 | 不适用 | 使困惑 |
| 不适用 | 不适用 | 问题 |
等等,这样每个单词都有自己的行,如果该行中的单词出现在该列中,它就会与其他列匹配
我一直在寻找如何做到这一点,但找不到好的代码。我得到的一个想法是创建所有出现的单词的列表,然后尝试将它们与每一列匹配,但仍然没有找到这方面的代码。
我们可以使用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)