Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
使用grepl的For循环_R_Loops_For Loop_If Statement_Grepl - Fatal编程技术网

使用grepl的For循环

使用grepl的For循环,r,loops,for-loop,if-statement,grepl,R,Loops,For Loop,If Statement,Grepl,我尝试使用for循环来运行数据帧,查看观察结果是否在列中包含某个字符串,即在列内容中不应包含任何规则,并根据结果在不同的列中生成值 如果它确实包含由grepl函数的结果为True标识的字符串,则观察值在Effectrp列中应具有“Permissive”;否则,它应该说“限制性” 我不太确定我做错了什么。。。任何帮助都将不胜感激 for (i in 1:nrow(ldb)){ if (grepl('no law', ldb$Content[i], ignore.case = TRUE)) ==

我尝试使用for循环来运行数据帧,查看观察结果是否在列中包含某个字符串,即在列内容中不应包含任何规则,并根据结果在不同的列中生成值

如果它确实包含由grepl函数的结果为True标识的字符串,则观察值在Effectrp列中应具有“Permissive”;否则,它应该说“限制性”

我不太确定我做错了什么。。。任何帮助都将不胜感激

for (i in 1:nrow(ldb)){
  if (grepl('no law', ldb$Content[i], ignore.case = TRUE)) == TRUE {
    ldb$Effectrp[i] = 'Permissive'
  } else {
    lab$EffectTR[i] = 'Restrictive'
  }
}

类似于我对这个问题的回答

我能看到的唯一潜在问题是其他部分的拼写错误。在前面的数据帧名为ldb,列名为Effectrp时,您编写了lab$EffectTR。不确定这是否是故意的

对冗余问题的澄清:

在if语句中不需要==TRUE。我是这样想的。现在你有:

if greplcheck在Content==TRUE中是否找到我的模式{ 做点什么 } grepl返回TRUE/FALSE,假设在内容中找不到规律,那么grepl的计算结果为TRUE,生成:

if (TRUE == TRUE) {
    do something
}
如果我们继续计算括号,我们知道事实上,TRUE==TRUE,因此这将减少为:

if (TRUE) {
    do something
}
这就是我们想要的。但是,当您可以像这样使用grepl的输出时,额外的检查TRUE==TRUE是不必要的:

if (grepl(check if my pattern is found in Content) {
    do something
}
这将评估:

if (TRUE) {
    do something
}
与前面一样,但是您正在跳过冗余==TRUE步骤。i、 if语句将运行,因为括号内的内容在字面意义上是真的


希望这更有意义!当我第一次学习它时,它也让我感到困惑。

你甚至不需要for循环,因为grepl将返回一个向量(如果应用于向量)。你可以试试类似的东西

ldb$Effectrp使用基本R:

ldb$RP% mutateeeffectrp2=ifelsestr\u检测内容,无法律、许可、限制 这些选项返回:

   Content    EffectRP   EffectRP2
1      law Restrictive Restrictive
2   no law  Permissive  Permissive
3      law Restrictive Restrictive
4   no law  Permissive  Permissive
5      law Restrictive Restrictive
6      law Restrictive Restrictive
7   no law  Permissive  Permissive
8   no law  Permissive  Permissive
9   no law  Permissive  Permissive
10  no law  Permissive  Permissive

你能澄清一下你说“如果真的”是什么意思吗?我不太明白。另外,感谢您注意到拼写错误@马丁格尔哦,是的。谢谢