2013-07-08 2 views
0

У меня есть список, какPattern Matching в R

> list(c("a","b","c","d"),c("b","c","e")) 
[[1]] 
[1] "a" "b" "c" "d" 

[[2]] 
[1] "b" "c" "e" 

У меня есть последовательность "БК". Я хочу сопоставить этот шаблон с моим списком и хочу узнать частоту этого шаблона. Обязательный результат: 2 Прежде всего, мне нужно преобразовать свой список в этот формат c("abcd"),c("bce"), чтобы я мог выполнить сопоставление. Как конвертировать и сопоставлять? Во-вторых, как рассчитать и сохранить частоту?

Я использовал функцию grepl, но возвращает логическое значение, а не счет.

+0

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

+0

список (c («a», «b», «c», «d»), c («b», «c», «e»)) – anu

+0

@ user2560936, которые должны идти в вопросе. –

ответ

1

Использование @ выборочных данных Тайлера, вы можете использовать gregexpr:

lst <- list(c('a', 'b', 'c', 'd', 'b', 'c'), 
      c('b', 'c', 'e')) 
lst2 <- lapply(lst, paste, collapse="") 
sapply(gregexpr("bc", lst2, fixed = TRUE), length) 
# [1] 2 1 
1

Вот один подход с использованием term.count (а не экспортируемой функции) из пакета qdap:

lst <- list(c('a', 'b', 'c', 'd', 'b', 'c'),c('b', 'c', 'e')) 
lst2 <- lapply(lst, paste, collapse="") #use lapply to paste the list 

## install.packages("qdap") 
sapply(lst2, qdap:::term.count, "bc") #count occurences 

## > sapply(lst2, qdap:::term.count, "bc") 
## bc bc 
## 2 1 

Если вы не хотите использовать qdap посмотреть на источник для term.count и принять то, что вам нужно.

+0

Я установил qdap-пакет, но при загрузке он показывает эту ошибку: Ошибка: .onLoad не удалось загрузить loadNamespace() для 'rJava', подробности: call: fun (libname, pkgname) ошибка: JAVA_HOME не может быть определен из реестра – anu

+0

Не уверен точно, но это может иметь отношение к версии java, которую вы используете. Когда я googled ваша ошибка, я получил [это сообщение в блоге] (http://www.r-statistics.com/2012/08/how-to-load-the-rjava-package-after-the-error-java_home-cannot -be-defined-from-the-registry /) об этом. Вы можете понять это или просто вырезать и вставить код из ссылки в 'term.count', который я дал выше, и запустил его. –

+0

Я хочу сохранить этот счет 2 в некоторой переменной для алгебраических вычислений. Как я могу это сделать? – anu