【发布时间】:2017-05-25 16:28:20
【问题描述】:
我有一个看起来像这样的数据框(我简化了):
df <- data.frame(rbind(c(1, "dog", "cat", "rabbit"), c(2, "apple", "peach", "cucumber")))
colnames(df) <- c("ID", "V1", "V2", "V3")
## ID V1 V2 V3
## 1 1 dog cat rabbit
## 2 2 apple peach cucumber
我想创建一个列,其中包含变量 V1:V3 的所有可能组合,两个两个(顺序无关紧要),但保持与原始 ID 的链接。所以像这样。
## ID bigrams
## 1 1 dog cat
## 2 1 cat rabbit
## 3 1 dog rabbit
## 4 2 apple peach
## 5 2 apple cucumber
## 6 2 peach cucumber
我的想法:使用combn()、mutate() 和separate_row()。
library(tidyr)
library(dplyr)
df %>%
mutate(bigrams=paste(unlist(t(combn(df[,2:4],2))), collapse="-")) %>%
separate_rows(bigrams, sep="-") %>%
select(ID,bigrams)
结果不是我所期望的……我想连接一个矩阵(combine() 的结果)没有那么容易。
对此我有两个问题:1)如何调试这段代码? 2)这是做这种事情的好方法吗?我是 R 新手,但我有 Open Refine 背景,所以连接拆分多值单元格对我来说很有意义。但这也是 R 的正确方法吗?
提前感谢您的帮助。
【问题讨论】: