gpt4 book ai didi

r - 根据数据框的所有行检查向量的每个元素

转载 作者:行者123 更新时间:2023-12-04 05:37:24 26 4
gpt4 key购买 nike

我有一个向量,我想根据数据框的每一行检查每个元素。它涉及 grep 函数,因为要检查的元素隐藏在其他文本中。

this forum 的帮助下,我得到了这个代码:

    mat=data.frame(par=c('long A story','C story', 'blabla D'),val=1:3) 
vec=c('Z','D','A')
mat$label <- NA
for (x in vec){
is.match <- lapply(mat$par,function(y) grep(x, y))
mat$label[which(is.match > 0)] <- x
}

问题是执行需要几分钟。有没有办法将其矢量化?

最佳答案

我假设你只想要在每种情况下的第一场比赛:

which.matches <- grep("[ZDA]", mat$par)
what.matches <- regmatches(mat$par, regexpr("[ZDA]", mat$par))

mat$label[which.matches] <- what.matches
mat

par val label
1 long A story 1 A
2 C story 2 <NA>
3 blabla D 3 D

编辑:基准测试
Unit: microseconds
expr min lq median uq max
1 answer(mat) 185.338 194.0925 199.073 209.1850 898.919
2 question(mat) 672.227 693.9610 708.601 725.6555 1457.046

编辑2:

正如@mrdwab 所建议的,这实际上可以用作单行:
mat$label[grep("[ZDA]", mat$par)] <- regmatches(mat$par, regexpr("[ZDA]", mat$par))

关于r - 根据数据框的所有行检查向量的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11755545/

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