R:通过分隔符和重新排列分割字符串向量

时间:2018-05-17 18:11:11

标签: r stringi

我有字符串向量需要以某种方式在矩阵中拆分和重新排列。我知道怎么做分裂/简单的重新排列,但是失去了重新排列我想要的方式:

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开头,虽然。

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

1 个答案:

答案 0 :(得分:2)

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

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