我在R和正则表达式中都非常生疏。我试过阅读R的正则表达式帮助文件,但它根本没用!
我有一个包含3列的数据框:
列表从最常见到最不常见排列,因此不按字母顺序排列。
我需要将所有以相同字母开头的单词拉出整行。 (我不需要遍历所有字母表,我只需要一个字母的结果。)
我不只是询问正则表达式,而是如何在R中编写它,所以我将结果放在一个新的数据帧中。
答案 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