我正在分析一些fmri数据--特别是,我正在研究哪些认知功能与fmri扫描中的坐标相关(在受试者执行任务时进行)。我的数据可以通过以下函数获得:
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')现在,我想知道哪些关键词出现得最频繁,最理想的情况是列出最常见的单词。我尝试了以下几点:
sort(table(RO4$Name),decreasing=TRUE)但这显然不是work.The问题,因为名称(例如:“听觉皮层”)是包含多个单词的字符串,因此这样的‘听觉’和‘听觉皮层’作为两个单独的条目出现,而我希望它们被计算为‘听觉’的两个实例。
但我不知道如何在每个字符串中搜索并记录这样的单个单词。有什么想法吗?
发布于 2022-02-26 13:07:03
使用包{jsonlite}、{dplyr}和管道操作符%>%可读性:
作为数据df的
url <- 'https://neurosynth.org/api/locations/-58_-22_6_6/compare/'
df <- jsonlite::fromJSON(url) %>% as.data.framedf %>%
## 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))结果:
+ # 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编辑:或者,如果您想继续从您的数据
RO4 %>%
select(Name) %>%
## select(everything())
## select(Name:func_con)
separate_rows(Name, sep=' ') %>%
## do remaining stuff当然,您可以以多种方便的方式select更多的列(请参阅上面的注释行和?dplyr::select)。请注意,其他变量的值将重复多次,以容纳列"Name“中的任何多值,从而引入一些冗余。
如果您想采用{dplyr}样式,按降z分数排列,并排除不需要的z分数,则如下所示:
RO4 %>%
filter(z_score < 3 & !is.na(z_score)) %>%
arrange(desc(z_score))发布于 2022-02-26 12:14:18
不一定能理解。你就不能这样做吗?
x <- c("auditory cortex", "auditory", "auditory", "hello friend")
unlist(strsplit(x, " "))
# "auditory" "cortex" "auditory" "auditory" "hello" "friend"https://stackoverflow.com/questions/71276411
复制相似问题