Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查R中字符串和单词向量之间的一致性_R - Fatal编程技术网

检查R中字符串和单词向量之间的一致性

检查R中字符串和单词向量之间的一致性,r,R,我正在用字符串处理R。我的数据帧DF具有下一个结构: DF <- data.frame(v1=c(1,2,3),v2=c("Oranges are fruits","Hit music","Ferrari is red"),stringsAsFactors = F) v1 v2 1 1 Oranges are fruits 2 2 Hit music 3 3 Ferrari is red 我正在寻找一种方法来测试v2中

我正在用字符串处理
R
。我的数据帧
DF
具有下一个结构:

DF <- data.frame(v1=c(1,2,3),v2=c("Oranges are fruits","Hit music","Ferrari is red"),stringsAsFactors = F)

  v1                 v2
1  1 Oranges are fruits
2  2          Hit music
3  3     Ferrari is red
我正在寻找一种方法来测试
v2
中的所有字符串是否与
d
一致。通过这种方式,我尝试了下一个代码:

DF$v3 <- grepl(d,DF$v2)
这是不正确的,因为
v2
第三行中的字符串包含
red
一词,该词包含在
d
中。有没有办法获得这样的输出:

  v1                 v2    v3
1  1 Oranges are fruits  TRUE
2  2          Hit music FALSE
3  3     Ferrari is red  TRUE

我的原始数据集更大,
DF
就是其中的一个示例。非常感谢您的帮助。

来自
?grepl
,关于
模式
参数:

如果提供长度为2或更多的字符向量,则使用第一个元素

因此,提供长度2
d
将只搜索
水果

要查看
d
中的任何字符串是否匹配,您可以使用
any
和迭代的方法,或者使用
|
符号折叠
d
作为模式,如下所示。请注意,在本例中,“He was barred”这样的句子将与“red”匹配

DF 2 2命中音乐错误
#>法拉利是红色的,真的

由(v0.3.0)于2019-07-12创建的一种方法是将
apply
grepl一起使用两次。它基本上是做一个双for循环。对于v2中的每个元素,grepl应用于d的每个元素

DF$v3 <- sapply(DF$v2, FUN = function(s) any(sapply(d, FUN = grepl, s)))
DF
DF$v3
  v1                 v2    v3
1  1 Oranges are fruits  TRUE
2  2          Hit music FALSE
3  3     Ferrari is red  TRUE
DF$v3 <- sapply(DF$v2, FUN = function(s) any(sapply(d, FUN = grepl, s)))
DF