【问题标题】:Put all words in a variable / dataframe and count number of times words showed up in a twitter dataframe in R将所有单词放在变量/数据框中,并计算单词出现在 R 中的 twitter 数据框中的次数
【发布时间】:2021-05-10 07:26:17
【问题描述】:

所以我有 10k 条推文,我希望能够将我想要查找的所有单词放入一个变量中,并计算这些单词在所有推文中出现的次数。

我有这个,但我不想每次都复制和粘贴这两行,尤其是当我数 50 个字时:

不是一个理想的代码:

coffee    <- grepl("coffee", tweetsDF$text, ignore.case=TRUE)
sum(coffee) / nrow(text)

mug    <- grepl("mug", tweetsDF$text, ignore.case=TRUE)
sum(mug) / nrow(text)

请帮我制作一个可以将所有单词放在一个框架中的位置。

预期输出:

words     freq
coffee    50
mug       20
milk      67
juice     78

【问题讨论】:

    标签: r twitter grepl


    【解决方案1】:

    我们可以使用lapply 来做到这一点

    out <- stack(lapply(setNames(words, words), function(x) 
          mean(grepl(x, tweetsDF$text, ignore.case = TRUE))))[2:1]
    names(out) <- c("words", "perc")
    

    -输出

    out
    #   words perc
    #1 coffee  0.4
    #2    mug  0.6
    

    更新

    如果要检查的单词是基于文件名的,通过循环遍历lapply中的文件名来读取文件,将输出存储在list('lst1')中,然后得到sum的来自grepl 的逻辑向量与“文本”列中的相应文件名相匹配,stack 将其与两列数据帧相匹配

    files <- c("coffee.csv", "mug.csv")
    words <-  tools::file_path_sans_ext(files)
    lst1 <- lapply(files, read.csv)
    out_lst <- Map(function(x, y) sum(grepl(y, x$text,
              ignore.case = TRUE)), lst1, words)
    names(out_lst) <- words
    out <- stack(out_lst)
    

    数据

    words <- c("coffee", "mug")
    tweetsDF <- data.frame(text = c("mug shot", "mug2", "coffee pot",
            "mug3", "coffee stand"))
    

    【讨论】:

    • 你能给我举个例子吗?把单词放在单词中并计数
    • @KateLara 你想计算还是得到百分比?您的代码建议百分比
    • 所以在获取数据方面我有这个: tweets
    • @KateLara 我为“推文”创建了一个示例数据,只是为了测试它。在您的情况下,您正在从“推文”中读取数据。我假设您检查的单词是一些自定义单词
    • 我从一个包含几行推文的 csv 文件列中获取单词 - 所以不仅仅是单词,而是推文(句子、短语等),我想计算单词的次数出现在该列中。
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2023-03-16
    相关资源
    最近更新 更多