Перекодировать с переменным количеством дел в R - PullRequest
0 голосов
/ 22 октября 2018

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

Например:

myNotableWords<-c("No_IM","IM","LGD","HGD","T1a")

aa<-c("No_IM","IM","No_IM","HGD","T1a","HGD","T1a","IM","LGD")
aa<-data.frame(aa,stringsAsFactors=FALSE)

Предполагаемый вывод

new<-(1,2,1,4,5,4,5,2,3)

Isесть ли способ получить индекс исходного списка, а затем посмотреть, где находится каждый элемент целевого списка в этом индексе, и заменить его индексным номером?

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы можете сделать это, используя data.frame;синтаксис не должен меняться.Я предпочитаю использовать data.table, хотя.

library(data.table)
myWords <- c("No_IM","IM","LGD","HGD","T1a")
myIndex <- data.table(keywords = myWords, word_index = seq(1, length(myWords)))

Третья строка просто добавляет индекс к вектору myWords.

aa <- data.table(keywords = c("No_IM","IM","No_IM","HGD","T1a",
                         "HGD","T1a","IM","LGD"))
aa <- merge(aa, myIndex, by = "keywords", all.x = TRUE)

И теперь у вас есть таблица с ключевым словоми его уникальный номер.

0 голосов
/ 22 октября 2018

Почему бы просто не использовать функциональность factor R?

"Тип данных фактора" хранит целое число, которое ссылается на "уровень" (= символьная строка) через индексный номер:

myNotableWords<-c("No_IM","IM","LGD","HGD","T1a")
aa<-c("No_IM","IM","No_IM","HGD","T1a","HGD","T1a","IM","LGD")

aa <- as.integer(factor(aa, myNotableWords, ordered = TRUE))

aa
# [1] 1 2 1 4 5 4 5 2 3
0 голосов
/ 22 октября 2018
new <- c()
for (item in aa) {
  new <- c(new, which(myNotableWords == item))
}
print(new)
#[1] 1 2 1 4 5 4 5 2 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...