Упорядочить символы в ячейке информационного кадра согласно образцу вектора - PullRequest
1 голос
/ 05 ноября 2019

У меня есть датафрейм DF1, как показано ниже. Я хочу расположить / упорядочить значения моего столбца Issues в соответствии с векторными строками Target. Мой желаемый результат: DF2

ID = c(1, 2, 3, 4)
Issues = c('CI', 'E,CI', 'H,A', 'CI,E')
Location = c('Chennai', 'Kolkatta', 'Mumbai', 'Bangalore')
DF1 = data.frame(ID, Issues, Location)

Target=c("A", "C", "H", "CI", "E")

ID = c(1, 2, 3, 4)
Issues = c('CI', 'CI,E', 'A,H', 'CI,E')
Location = c('Chennai', 'Kolkatta', 'Mumbai', 'Bangalore')
DF2 = data.frame(ID, Issues, Location)

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Мы можем разделить строку на запятую, match, используя Target и order, подмножество из x и преобразовать ее в строку, разделенную запятой, используя toString.

D1$NewIssue <- sapply(strsplit(as.character(D1$Issues), ","), function(x) 
              toString(x[order(match(x, Target))]))
D1

#  ID Issues  Location NewIssue
#1  1     CI   Chennai       CI
#2  2   E,CI  Kolkatta    CI, E
#3  3    H,A    Mumbai     A, H
#4  4   CI,E Bangalore    CI, E

Мы также можем использовать sort и подмножество от Target вместо x

sapply(strsplit(as.character(D1$Issues), ","), function(x) 
            toString(Target[sort(match(x, Target))]))
0 голосов
/ 05 ноября 2019

Может быть, ниже может помочь вам:

DF1$Issues <- sapply(DF1$Issues, function(v) paste0(sort(unlist(regmatches(v,gregexpr("\\w+",v)))),collapse = ","))
...