次のようなデータフレームがあります。
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)