我有一個看起來像這樣的數據幀:更好的方法將一列分成許多列,然後收集結果?
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)
'庫(splitstackshape); cSplit(df,「收件人」,「|」,「長」),但我有偏見。 – A5C1D2H2I1M1N2O1R2T1
但是,您可能正在尋找類似'df%>%mutate(recipients = strsplit(as.character(recipients),「\\ |」))%>%unnest(recipients)'.... – A5C1D2H2I1M1N2O1R2T1