новый столбец с вставкой 0 в R

#r #string #tm

#r #строка #tm

Вопрос:

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

У меня есть список слов с вашим идентификатором:

 car = 9112
red = 9512
employee = 6117
sky = 2324

words<- c("car", "sky", "red", "employee", "domestic")
match<- c("car", "red", "domestic", "employee", "sky")
  

сравнение производится путем чтения в файле Excel, если оно находит значение, равное моим векторным словам, оно заменяет слово своим идентификатором, но оставляет исходное слово

     x10<- c(words)# string

words.corpus <-  c(L4$`match`) #  pattern
idwords.corpus <- c(L4$`ID`) # replace
words.corpus <- paste0("\A",idwords.corpus, "\z|\A", words.corpus,"\z")

vect.corpus <- idwords.corpus
names(vect.corpus) <- words.corpus

data15 <- str_replace_all(x10, vect.corpus)
  

Результат:

data15:

 " 9112", "2324", "9512", "6117", "employee"
  

Что я ищу, так это добавить новый столбец с идентификатором, вместо замены слова на идентификатор

 words      ID
car           9112
red          9512
employee 6117
sky            2324
domestic domestic
  

Комментарии:

1. сложно полностью помочь вам без дополнительной информации. Но вы могли бы использовать data.frame или data.table . data15 <- cbind(x10,ID=str_replace_all(x10, vect.corpus))

Ответ №1:

Я бы использовал data.table для быстрого поиска на основе фиксированного значения words. Хотя не на 100% ясно, что вы запрашиваете, звучит так, как будто вы хотите заменить слова значением индекса, если есть совпадение, или оставить слово как слово, если нет. Этот код сделает это:

 library("data.table")

# associate your ids with fixed word matches in a named numeric vector
ids <- data.table(
  word = c("car", "red", "employee", "sky"),
  ID = c(9112, 9512, 6117, 2324)
)
setkey(ids, word)

# this is what you would read in
data <- data.table(
  word = c("car", "sky", "red", "employee", "domestic", "sky")
)
setkey(data, word)

data <- ids[data]
# replace NAs from no match with word
data[, ID := ifelse(is.na(ID), word, ID)]

data
##        word       ID
## 1:      car     9112
## 2: domestic domestic
## 3: employee     6117
## 4:      red     9512
## 5:      sky     2324
## 6:      sky     2324
  

Здесь «domestic» не соответствует, поэтому оно остается как слово в столбце ID. Я также повторил «sky», чтобы показать, как это будет работать для каждого экземпляра word.

Если вы хотите сохранить исходный порядок сортировки, вы могли бы создать переменную индекса перед объединением, а затем изменить порядок вывода по этой переменной индекса.