Извлечение нескольких подстрок и возвращение значения для каждой подстроки - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы найти элегантный подход:

  1. для извлечения нескольких подстрок из каждой строки в df1
  2. сохранить несколько подстрок для каждой строки в виде вектора или списка
  3. возвращает значение для каждого вектора строки в df1

У меня есть два фрейма данных:

n = c("Canada and USA", "USA and Mexico", "Canada and Mexico")
df1 = data.frame(n)

m = c("Canada", "USA", "Mexico")
o = c(5, 8, 7)
df2= data.frame(m, o)

Мой результирующий фрейм данных будет выглядеть так:

n = c("Canada and USA", "USA and Mexico", "Canada and Mexico")
p = c(13, 15, 12)
df3 = data.frame(n, p)

где значения вектора 'p', это сумма элементов вектора 'o', которые соответствуют вектору 'n'.

Примечание: я только ищу метод, поэтому я могу работать над этой проблемой.

В настоящее время я застрял на использовании lapply и regex для извлечения нескольких подстрок из df1 и не знаю, как хранить подстроки, будь то список или другой фрейм данных.

Буду очень признателен за любые мысли и советы о том, как подойти к проблеме, поскольку я хотел бы не торопиться, чтобы полностью понять механизм, лежащий в основе решения этой проблемы.

Заранее спасибо!

Отредактировано: для форматирования

1 Ответ

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

Может быть, следующее будет делать то, что вы хотите.
Сначала создайте индексную матрицу с индексами совпадений df2$m. Затем используйте индексную матрицу для суммирования значений в df2$o.

inx <- sapply(df2$m, function(s) grep(s, df1$n))
df4 <- data.frame(n, p = apply(inx, 2, function(i) sum(df2$o[i])))

df4
#                  n  p
#1    Canada and USA 12
#2    USA and Mexico 13
#3 Canada and Mexico 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...