R:按分隔符拆分字符串向量并重新排列

R: split string vector by delimiter and rearrange

我有一个字符串向量需要以某种方式在矩阵中拆分和重新排列。我知道如何 split/simple 重新排列,但不知道如何重新排列我想要的方式:

library(stringi)

vec = c("b;a;c","a;c","c;b")
q = stri_split_fixed(vec, ";", simplify = TRUE,fill=T)
View(q)

V1  V2  V3
b   a   c
a   c    
c   b    

期望的输出

V1  V2  V3
a   b   c
a       c 
    b   c 

谢谢! 编辑:

上面的字母是为了简单起见。真正的选项是(非详尽列表):D-Amazon MarketplaceU-AmazonD-AmazonU-Jet 等。仅以 UD 开头,尽管。

订单 - 按字母顺序排列但按零售商分组。如果太复杂 - 没有顺序是可以的

此解决方案生成一个布尔矩阵,每个向量作为行,每个可能的字符作为列。

possible_options = c('a', 'b', 'c')
result <- sapply(possible_options, function(x) apply(q, 1, function(y) x %in% y))
result
         a     b    c
[1,]  TRUE  TRUE TRUE
[2,]  TRUE FALSE TRUE
[3,] FALSE  TRUE TRUE

此解决方案需要所有选项的列表。如果没有,您可以列出所有可能的选项(例如所有字母数字字符),然后删除空白行:

result <- sapply(c(letters, LETTERS), function(x) apply(q, 1, function(y) x %in% y))
result <- result[, colSums(result) > 0]
result
         a     b    c
[1,]  TRUE  TRUE TRUE
[2,]  TRUE FALSE TRUE
[3,] FALSE  TRUE TRUE

或者从q

的结果中提取它们
opts <- as.character(unique(unlist(q)))
opts <- opts[sort.list(opts[opts != ''])]
result <- sapply(opts , function(x) apply(q, 1, function(y) x %in% y))
result
         a     b    c
[1,]  TRUE  TRUE TRUE
[2,]  TRUE FALSE TRUE
[3,] FALSE  TRUE TRUE