我正在研究R中的一个小程序,它允许我从数据框中的列表中计算出现次数。
因此,我按如下方式导入我的数据框和单词列表。
df <- read.csv("tweets.csv")
wordlist <- read.csv("wordlist.csv")
我的想法是使用一个“for”循环,它遍历wordlist中的所有单词,计算它们在df数据框中的出现次数,然后将该数字添加到现有的单词列表中。
for (id in wordlist)
{
wordlist$frequency <- sum(stri_detect_fixed(df$text, wordlist$word))
}
显然这不起作用。相反,它将我的词汇表中所有单词的频率添加到词表数据框中的每个单词,如下所示:
id word freuquency
1 the 1290
2 answer 1290
3 is 1290
4 wrong 1290
我知道它必须对我的for循环中的运行变量做一些事情。任何帮助表示赞赏:)
答案 0 :(得分:0)
我会清理推文df以将内容变为小写,删除停用词和标点符号等。(首先清理推文,否则你将会得到&#34; Dog&#34;以及&#34; dog& #34;作为两个不同的词。
x <- c("Heute oft gelesen: Hörmann: «Lieber die Fair-Play-Medaille» als Platz eins t.co/w75t1O3zWQ t.co/fQJ2eUbGLf",
"Lokalsport: Wallbaum versteigert Olympia-Kalender t.co/uH5HnJTwUE",
"Die „politischen Spiele“ sind hiermit eröffnet: t.co/EWSnRmNHlw via @de_sputnik")
wordlist <- c("Olympia", "hiermit", "Die")
然后我会sapply
tolower
版本并按空格解析。然后我使用unlist
将其展平,使其成为单个向量而不是列表,然后取消对其进行取消命名,以便更容易阅读。
wordvec <- unname(unlist(sapply(x, function(z) str_split(tolower(z), " "))))
[1] "heute" "oft" "gelesen:" "hörmann:" "«lieber"
[6] "die" "fair-play-medaille»" "als" "platz" "eins"
[11] "t.co/w75t1o3zwq" "t.co/fqj2eubglf" "lokalsport:" "wallbaum" "versteigert"
[16] "olympia-kalender" "t.co/uh5hnjtwue" "die" "\u0084politischen" "spiele\u0093"
[21] "sind" "hiermit" "eröffnet:" "t.co/ewsnrmnhlw" "via"
[26] "@de_sputnik"
我认为这仍然非常混乱。我会查找一些文字清理解决方案,例如删除特殊字符,或使用grepl
或其他内容删除http
内容。
要过滤列表以仅包含您的字词,请尝试:
wordvec[wordvec %in% tolower(wordlist)]
[1] "die" "die" "hiermit"
然后您可以使用table
table(wordvec[wordvec %in% tolower(wordlist)])
die hiermit
2 1
如果你愿意的话,你可以反过来完成最后一部分,但是我会专注于清理文本以删除特殊字符,只是做一些文本清理。
答案 1 :(得分:0)
这是我如何使用sapply来做到这一点。该函数检查data
是否包含3个连续的字母组合并计算计数。
library(tidyverse)
library(stringi)
1000个随机创建的长度为100个字母的字符串
data <- replicate(100, sample(letters, size = 1000, replace = TRUE))%>%
data.frame()%>%
unite("string" , colnames(.) , sep = "", remove = TRUE)%>%
.$string
head(data)
[1] "uggwaevptdbhhnmvunkcgdssgmulvyxxhnavbxxotwvkvvlycjeftmjufymwzofrhepraqfjlfslynkvbyommaawrvaoscuytfws"
[2] "vftwusfmkzwougqqupeeelcyaefkcxmrqphajcnerfiitttizmpjucohkvsawwiqolkvuofnuarmkriojlnnuvkcreekirfdpsil"
[3] "kbtkrlogalroiulppghcosrpqnryldiuigtsfopsldmcrmnwcwxlhtukvzsujkhqnillzmgwytpneigogvnsxtjgzuuhbjpdvtab"
[4] "cuzqynmbidfwubiuozuhudfqpynnfmkplnyetxxfzvobafmkggiqncykhvmmdrexvxdvtkljppudeiykxsapvpxbbheikydcagey"
[5] "qktsojaevqdegrqunbganigcnvkuxbydepgevcwqqkyekezjddbzqvepodyugwloauxygzgxnwlrjzkyvuihqdfxptwrpsvsdpzf"
[6] "ssfsgxhkankqbrzborfnnvcvqjaykicocxuydzelnuyfljjrhytzgndrktzfglhsuimwjqvvvtvqjsdlnwcbhfdfbsbgdmvfyjef"
参考检查
上的data
three_consec_letters = expand.grid(letters, letters, letters)%>%
unite("consec", colnames(.), sep = "", remove = TRUE)%>%
.$consec
head(three_consec_letters)
[1] "aaa" "baa" "caa" "daa" "eaa" "faa"
检查并汇总three_consec_letters是否为冗长的字符串
counts = sapply(three_consec_letters, function(x) stri_detect_fixed(data, x)%>%sum())
<强>结果
head(counts)
aaa baa caa daa eaa faa
5 6 6 4 0 3
希望这有帮助。