gpt4 book ai didi

r - 在 R 中保存 str_which 循环的输出

转载 作者:行者123 更新时间:2023-12-01 23:36:03 25 4
gpt4 key购买 nike

我处理一张列出各种科学出版物的数据表。行是出版物,列是描述每个出版物的各种指标(作者姓名和职位、Pubmed ID、日期等...)我想过滤每个作者的出版物并提取其中的一部分。需要注意的是格式:所有作者姓名(每个单元格 5-80 个)都集中在每一行的一个单元格中。

我设法通过使用 str_which 解决了这个问题,保存了每个作者的坐标并稍后提取。这仅适用于手动使用。当我尝试使用循环自动执行此过程以绘制作者列表时,我无法保存输出。

我对如何在不覆盖以前的结果的情况下存储结果有点不知所措。

sampleDat <- 
data.frame(var1 = c("Doe J, Maxwell M, Kim HE", "Cronauer R, Carst W, Theobald U", "Theobald U, Hey B, Joff S"),
var2 = c(1:3),
var3 = c("2016-01", "2016-03", "2017-05"))

我想要坐标的名称列表

namesOfInterest <-
list(c("Doe J", "Theobald U"))

手动提取,要求我输入准确的名称和输出对象

Doe <- str_which(sampleDat$var1, "Doe J")           
Theobald <- str_which(sampleDat$var1, "Theobald U")

不复制手动版本的许多尝试之一。

results <- c()

for (i in namesOfInterest) {
results[i] <- str_which(sampleDat$var1, i)
}

最佳答案

for 循环设置不正确(它需要类似于 for(i in 1:n){do something})。此外,即使您修复了该问题,您也会收到与以下事实相关的错误:str_which 返回一个可变长度 的向量,指示每个匹配项的位置使(并且它可以进行多次匹配)。因此,在循环中索引向量在这里不起作用,因为每当作者有多个匹配项时,多个条目将保存到单个元素,从而引发错误。

通过使用列表来解决这个问题,因为列表可以包含任意长度的向量。使用双括号符号索引列表:[[

library(stringr)
sampleDat <-
data.frame(var1 = c("Doe J, Maxwell M, Kim HE", "Cronauer R, Carst W, Theobald U", "Theobald U, Hey B, Joff S"),
var2 = c(1:3),
var3 = c("2016-01", "2016-03", "2017-05"))

# no need for list here. a simple vector will do
namesOfInterest <- c("Doe J", "Theobald U")

# initalize list
results <- vector("list", length = length(namesOfInterest))

# loop over list, saving output of `str_which` in each list element.
# seq_along(x) is similar to 1:length(x)
for (i in seq_along(namesOfInterest)) {
results[[i]] <- str_which(sampleDat$var1, namesOfInterest[i])
}

返回:

> results
[[1]]
[1] 1

[[2]]
[1] 2 3

理解上面输出的方法是列表的第 ith<​​ 元素 results[[i]] 包含 str_which(sampleDat$ var1, namesOfInterest[i]),其中 namesOfInterest[i] 始终恰好是一位作者。但是,results[[i]] 的长度可以超过一个:

> sapply(results, length)
[1] 1 2

表示一个作者可以被多次提及。在上面的示例中,sapply 计算列表 results 中每个向量的长度,显示 namesOfInterest[1] 有一篇论文,并且 namesOfInterest[2] 有 2 个。`

关于r - 在 R 中保存 str_which 循环的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60233151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com