首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中找到字符向量中最常见的单词?

如何在R中找到字符向量中最常见的单词?
EN

Stack Overflow用户
提问于 2022-02-26 11:54:11
回答 2查看 266关注 0票数 2

我正在分析一些fmri数据--特别是,我正在研究哪些认知功能与fmri扫描中的坐标相关(在受试者执行任务时进行)。我的数据可以通过以下函数获得:

代码语言:javascript
复制
library(httr)
scrape_and_sort = function(neurosynth_link){
  result = content(GET(neurosynth_link), "parsed")$data
  names  = c("Name", "z_score", "post_prob", "func_con", "meta_analytic")
  df = do.call(rbind, lapply(result, function(x) setNames(as.data.frame(x), names)))
  df$z_score = as.numeric(df$z_score)
  df = df[order(-df$z_score), ]
  df = df[-which(df$z_score<3),]
  df = na.omit(df)
  return(df)
}
 RO4 = scrape_and_sort('https://neurosynth.org/api/locations/-58_-22_6_6/compare')

现在,我想知道哪些关键词出现得最频繁,最理想的情况是列出最常见的单词。我尝试了以下几点:

代码语言:javascript
复制
sort(table(RO4$Name),decreasing=TRUE)

但这显然不是work.The问题,因为名称(例如:“听觉皮层”)是包含多个单词的字符串,因此这样的‘听觉’和‘听觉皮层’作为两个单独的条目出现,而我希望它们被计算为‘听觉’的两个实例。

但我不知道如何在每个字符串中搜索并记录这样的单个单词。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-26 13:07:03

使用包{jsonlite}、{dplyr}和管道操作符%>%可读性:

作为数据df

  1. 存储响应

代码语言:javascript
复制
url <- 'https://neurosynth.org/api/locations/-58_-22_6_6/compare/'
df <- jsonlite::fromJSON(url) %>% as.data.frame

  1. 重塑和聚合

代码语言:javascript
复制
df %>%
    ## keep first column only and name it 'keywords':
    select('keywords' = 1) %>%
    ## multiple cell values (as separated by a blank)
    ## into separate rows:
    separate_rows(keywords, sep = " ") %>%
    group_by(keywords) %>%
    summarise(count = n()) %>%
    arrange(desc(count))

结果:

代码语言:javascript
复制
+ # A tibble: 965 x 2
   keywords count
   <chr>    <int>
 1 cortex      53
 2 gyrus       26
 3 temporal    26
 4 parietal    23
 5 task        22
 6 anterior    19
 7 frontal     18
 8 visual      17
 9 memory      16
10 motor       16
# ... with 955 more rows

编辑:或者,如果您想继续从您的数据

代码语言:javascript
复制
RO4 %>%
    select(Name) %>%
    ## select(everything())
    ## select(Name:func_con)
    separate_rows(Name, sep=' ') %>%
    ## do remaining stuff

当然,您可以以多种方便的方式select更多的列(请参阅上面的注释行和?dplyr::select)。请注意,其他变量的值将重复多次,以容纳列"Name“中的任何多值,从而引入一些冗余。

如果您想采用{dplyr}样式,按降z分数排列,并排除不需要的z分数,则如下所示:

代码语言:javascript
复制
RO4 %>%
    filter(z_score < 3 & !is.na(z_score)) %>%
    arrange(desc(z_score))
票数 2
EN

Stack Overflow用户

发布于 2022-02-26 12:14:18

不一定能理解。你就不能这样做吗?

代码语言:javascript
复制
x <- c("auditory cortex", "auditory", "auditory", "hello friend")
unlist(strsplit(x, " "))
# "auditory" "cortex"   "auditory" "auditory" "hello"    "friend"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71276411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档