查找以某个字母开头的所有单词

时间:2013-02-04 11:06:42

标签: regex string r

我在R和正则表达式中都非常生疏。我试过阅读R的正则表达式帮助文件,但它根本没用!

我有一个包含3列的数据框:

  1. 词汇,即在语料库中找到的500个最常见单词的列表
  2. 计数,单词出现的次数,
  3. 概率,计数除以所有字数的总和
  4. 列表从最常见到最不常见排列,因此不按字母顺序排列。

    我需要将所有以相同字母开头的单词拉出整行。 (我不需要遍历所有字母表,我只需要一个字母的结果。)

    我不只是询问正则表达式,而是如何在R中编写它,所以我将结果放在一个新的数据帧中。

2 个答案:

答案 0 :(得分:5)

您可以使用grep

df <- data.frame(words=c("apple","orange","coconut","apricot"),var=1:4)
df[grep("^a", df$words),]

这将给出:

    words var
1   apple   1
4 apricot   4

答案 1 :(得分:1)

也许这对你有用。

# Creating some data
 set.seed(001)
    count <- sample(1:100, 6, TRUE)
    DF <- data.frame(vocabulary=c('action', 'can', 'book', 'candy', 'any','bar'),
                     count=count,
                     probability=count/sum(count)
                     )

# Spliting by the first letter
Split <- lapply(1:3, function(DF, i){
  DF[grep(paste0('^', letters[i]), DF$vocabulary),]
}, DF=DF)

Split
[[1]]
      vocabulary count probability
1     action    27  0.08307692
5        any    21  0.06461538

[[2]]
  vocabulary count probability
3       book    58   0.1784615
6        bar    90   0.2769231

[[3]]
  vocabulary count probability
2        can    38   0.1169231
4      candy    91   0.2800000

正如您所看到的结果是一个列表,您可能希望使用1:3更改lapply调用中的1:26以考虑所有字母。

请注意,结果是未经编辑的,但使用orderBy包中的doBy函数

可以轻松完成此操作
 lapply(Split, function(x) orderBy(~vocabulary, data=x ))
[[1]]
  vocabulary count probability
1     action    27  0.08307692
5        any    21  0.06461538

[[2]]
  vocabulary count probability
6        bar    90   0.2769231
3       book    58   0.1784615

[[3]]
  vocabulary count probability
2        can    38   0.1169231
4      candy    91   0.2800000