allWords
是130万字的向量,有一些重复。我想做的是创建两个向量:
A,单词
B出现单词
这样我以后就可以将它们加入到矩阵中,从而将它们联系起来,例如:“妈妈”,3; “铅笔”,14等。
for(word in allWords){
#get a vector with indexes for all repetitions of a word
temp <- which(allWords==word)
#Make "allWords" smaller - remove duplicates
allWords= allWords[-which(allWords==word)]
#Calculate occurance
occ<-length(temp)
#store
A = c(A,word)
B = c(B,occ)
}
这个for循环需要永远,我不知道为什么或我做错了什么。从文件中读取130万个单词的速度最快可达5秒,但执行这些基本操作永远不会让算法终止。
答案 0 :(得分:3)
使用table()
:
> table(c("dog", "cat", "dog"))
cat dog
1 2
向量是相应数据帧的列:
A <- as.data.frame(table(c("dog", "cat", "dog")))[,1]
B <- as.data.frame(table(c("dog", "cat", "dog")))[,2]
结果:
> A
[1] cat dog
Levels: cat dog
> B
[1] 1 2
答案 1 :(得分:2)
给出你的矢量大小,我认为data.table
在这种情况下可以成为好朋友_
> library(data.table)
> x <- c("dog", "cat", "dog") # Ferdinand.kraft's example vector
> dtx <- data.table(x) # converting `x` vector into a data.table object
> dtx[, .N, by="x"] # Computing the freq for each word
x N
1: dog 2
2: cat 1
答案 2 :(得分:0)
您可以使用list
来制作哈希“key:value”对。
data = c("joe", "tom", "sue", "joe", "jen")
aList = list()
for(i in data){
if (length(aList[[i]]) == 0){
aList[[i]] = 1
} else {
aList[[i]] = aList[[i]] + 1
}
}
结果
$joe
[1] 2
$tom
[1] 1
$sue
[1] 1
$jen
[1] 1