使用grepl的For循环
我尝试使用for循环来运行数据帧,查看观察结果是否在列中包含某个字符串,即在列内容中不应包含任何规则,并根据结果在不同的列中生成值 如果它确实包含由grepl函数的结果为True标识的字符串,则观察值在Effectrp列中应具有“Permissive”;否则,它应该说“限制性” 我不太确定我做错了什么。。。任何帮助都将不胜感激使用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 (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
你能澄清一下你说“如果真的”是什么意思吗?我不太明白。另外,感谢您注意到拼写错误@马丁格尔哦,是的。谢谢