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

3

我有一个字符串向量需要按照特定的方式进行拆分和重新排列成矩阵。我知道如何进行拆分/简单重排,但不知道如何按照我想要的方式进行重新排列:

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-亚马逊市场U-亚马逊D-亚马逊U-Jet等。但只有以UD开头的选项。

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


你能否总是假设第一行包含所有的因子/字母? - JasonAizkalns
不限长度 - Alexey Ferapontov
2
你知道总共有多少个选项吗?或者,顺序是否重要,只需要将相同的字符分组在同一列中? - Calum You
我认为你需要一个更完整的例子,如果第一行是 b, a, c, _, d,那么会发生什么?d 会移动吗? - JasonAizkalns
1
我首先对数据进行处理,以便包含字母字符。 - Alexey Ferapontov
编辑。没有选项的先前知识。 - Alexey Ferapontov
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接