2017-02-18 4 views
0

Я ищу способ найти способ создания подмножества слов из списка слов, содержащих конкретную букву.Функция R для поиска подмножества слов на основе буквы

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

Я был в состоянии найти общее количество букв в списке слов:

> letters_table2<-table(unlist(strsplit(newdata2, ""), use.names=FALSE)) 
> letters_table2 

a b c d e f g h i j k l m n o p q r s t u v w x y z 
14 9 11 8 11 6 4 7 12 3 3 9 14 7 9 8 6 13 13 6 7 8 4 7 8 3 

я хотел бы создать список слов, которые содержат только, б, в и т.д. .. из новыйdata2.

newdata2 
    [1] "ae" "aj" "al" "an" "av" "av" "ay" "ba" "bd" "bd" "bk" "bl" "bv" "ca" "cl" "cm" "co" 
[18] "cr" "cy" "dh" "dl" "dm" "ea" "ec" "ef" "er" "ex" "ex" "ez" "fm" "fo" "ft" "gi" "gy" 
[35] "hb" "hm" "hr" "hr" "hs" "id" "in" "io" "iq" "ir" "ir" "it" "iz" "ja" "js" "kn" "lc" 
[52] "ld" "le" "lp" "ls" "me" "mg" "mh" "mi" "mi" "mm" "mo" "ms" "nf" "nw" "ny" "ok" "op" 
[69] "ox" "pa" "pi" "pr" "ps" "ps" "py" "qc" "qf" "qm" "qu" "qy" "rn" "rr" "rs" "rt" "ru" 
[86] "sa" "so" "ss" "ts" "uc" "us" "uu" "ux" "vb" "vc" "vv" "vw" "wb" "wg" "xe" "xo" "xt" 
[103] "yd" "yt" "za" 
+0

Просьба предоставить нам некоторые данные примеры использования 'dput (newdata2)' , Если newdata2 очень длинный, вы можете просто включить начало с помощью 'dput (head (newdata2, 25))'. Затем вставьте результаты в свой вопрос. – G5W

+1

для букв a, b, c, then, 'grep (вставка (буквы [1: 3], collapse = '|'), newdata2, value = TRUE)' для получения слов, а затем перенос их в 'table' – Sotos

+0

'setNames (lapply (буквы, функция (y) grep (y, x, value = TRUE)), буквы)' это то, что кажется вам. – A5C1D2H2I1M1N2O1R2T1

ответ

1

Я хотел бы предложить:

setNames(lapply(letters, function(y) grep(y, x, value = TRUE)), letters) 

Вот простой пример, используя только 5 букв, а не все 26.

set.seed(1) 
mydata <- paste0(sample(letters[1:5], 15, TRUE), 
       sample(letters[1:5], 15, TRUE)) 
table(unlist(strsplit(mydata, ""), use.names = FALSE)) 
## 
## a b c d e 
## 4 11 2 7 6 
setNames(lapply(letters[1:5], function(y) { 
    grep(y, mydata, value = TRUE) 
}), letters[1:5]) 
## $a 
## [1] "da" "ab" "aa" 
## 
## $b 
## [1] "bc" "bd" "eb" "bd" "eb" "ab" "bb" "db" "be" "db" 
## 
## $c 
## [1] "bc" "ce" 
## 
## $d 
## [1] "bd" "bd" "dd" "da" "db" "db" 
## 
## $e 
## [1] "ce" "eb" "ee" "eb" "be" 
## 
Смежные вопросы