R: разбить вектор строки по разделителю и переставить - PullRequest
0 голосов
/ 17 мая 2018

У меня есть строковый вектор, который нужно разделить и переставить в матрице определенным образом. Я знаю, как сделать раскол / простую перестановку, но потерял, как переставить, как я хочу:

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 

Спасибо! EDIT:

Буквы выше для простоты. Реальные параметры (не исчерпывающий список): D-Amazon Marketplace, U-Amazon, D-Amazon, U-Jet и т. Д. Начинается только с U и D.

Порядок - в алфавитном порядке, но сгруппированы по продавцам. Если слишком сложно - нет заказа ОК

1 Ответ

0 голосов
/ 17 мая 2018

Это решение генерирует логическую матрицу с каждым вектором в виде строки и каждым возможным символом в виде столбца.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...