Я создаю набор данных для вычисления совокупных значений для различных комбинаций слов с помощью регулярного выражения. Каждая строка имеет уникальное значение регулярного выражения, которое я хочу сравнить с другим набором данных и узнать, сколько раз оно появлялось в нем.
Первый набор данных (df1) выглядит так:
word1 word2 pattern
air 10 (^|\\s)air(\\s.*)?\\s10($|\\s)
airport 20 (^|\\s)airport(\\s.*)?\\s20($|\\s)
car 30 (^|\\s)car(\\s.*)?\\s30($|\\s)
Другой набор данных (df2), из которого я хочу сопоставить, выглядит так:
sl_no query
1 air 10
2 airport 20
3 airport 20
3 airport 20
3 car 30
Окончательный результат, который я хочу, должен выглядеть так: word1 word2 total_occ air 10 1 airport 20 3 car 30 1
Я могу сделать это, используя apply в R
process <-
function(x)
{
length(grep(x[["pattern"]], df2$query))
}
df1$total_occ=apply(df1,1,process)
но на это уходит время, так как мой набор данных довольно большой.
Я обнаружил, что функцию "mclapply" пакета "parallel" можно использовать для запуска таких вещей на многоядерных компьютерах, для которых я сначала пытаюсь запустить lapply. Это дает мне ошибку, говоря
lapply(df,process)
Ошибка в x [, "pattern"]: неверное количество измерений
Пожалуйста, дайте мне знать, какие изменения я должен внести, чтобы работать нормально.
lapply
, верно? - person Frank   schedule 17.06.2015lapply
применит некоторую функцию к каждому элементу списка по очереди; поэтому функция должна иметь возможность работать с элементами списка. Элементами в этом контексте фрейма данных являются его столбцы, поэтому вы просите R применитьprocess
к каждому столбцуdf
. - person tegancp   schedule 17.06.2015