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 Marketplace
、U-Amazon
、D-Amazon
、U-Jet
等。仅以 U
和 D
开头,尽管。
订单 - 按字母顺序排列但按零售商分组。如果太复杂 - 没有顺序是可以的
此解决方案生成一个布尔矩阵,每个向量作为行,每个可能的字符作为列。
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
我有一个字符串向量需要以某种方式在矩阵中拆分和重新排列。我知道如何 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 Marketplace
、U-Amazon
、D-Amazon
、U-Jet
等。仅以 U
和 D
开头,尽管。
订单 - 按字母顺序排列但按零售商分组。如果太复杂 - 没有顺序是可以的
此解决方案生成一个布尔矩阵,每个向量作为行,每个可能的字符作为列。
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