我有一个看起来像这样的数据框:
message.id,sender,recipients
1,A,B|C
2,A,B
3,B,C|D|Q
我想recipients
在“|”上拆分列 然后收集结果来产生这个:
message.id,sender,recipient
1,A,B
1,A,C
2,A,B
3,B,C
3,B,D
3,B,Q
完成这种操作的更清晰的方法是什么?这是我当前的代码:
library(dplyr)
library(stringr)
library(tidyr)
df <- data.frame(message.id = c(1,2,3),
sender = c("A","A","B"),
recipients = c("B|C","B","C|D|Q"))
max.splits = df$recipients %>% str_count("\\|") %>% max + 1
df %>% separate(recipients,1:max.splits, sep = "\\|") %>%
gather(trash,recipient,-message.id,-sender) %>%
select(message.id, sender, recipient) %>%
filter(recipient %>% is.na == FALSE) %>%
arrange(message.id)