首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环使用grepl

循环使用grepl
EN

Stack Overflow用户
提问于 2020-06-22 16:25:19
回答 3查看 953关注 0票数 0

我试图使用for循环在数据框架中运行,查看一个观察是否包含列中的某个字符串(即,它应该包含列内容中的"no law“),并根据结果在另一列中生成值。

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

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

代码语言:javascript
复制
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'
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-22 16:34:29

类似于我写给this问题的答案。

我能看到的唯一潜在问题是else部分的输入。您在前面编写lab$EffectTR时,您的数据文件名为ldb,列名为Effectrp。不知道这是不是故意的。

对冗余事物的澄清:

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

代码语言:javascript
复制
if (grepl(check if my pattern is found in Content) == TRUE) {
    do something
}

grepl返回TRUE/FALSE,因此假设在Content中找到了"no law",然后grepl计算为TRUE,生成:

代码语言:javascript
复制
if (TRUE == TRUE) {
    do something
}

如果我们继续计算括号,我们知道实际上是TRUE == TRUE,因此这可以简化为:

代码语言:javascript
复制
if (TRUE) {
    do something
}

这就是我们想要的。但是,当您只需要使用grepl的输出时,额外的检查TRUE == TRUE是不必要的,如下所示:

代码语言:javascript
复制
if (grepl(check if my pattern is found in Content) {
    do something
}

这将对以下方面进行评价:

代码语言:javascript
复制
if (TRUE) {
    do something
}

和以前一样,但是您跳过了冗余的== TRUE步骤。也就是说,if语句将运行,因为括号内的东西是字面意义上的TRUE

希望这更有意义!当我第一次学到它的时候,我也很困惑。

票数 1
EN

Stack Overflow用户

发布于 2020-06-22 16:39:02

您甚至不需要for循环,因为如果应用到向量,grepl将返回一个向量。你可以试试

代码语言:javascript
复制
ldb$Effectrp <- 'Restrictive'
lbd$Effectrp[grepl('no law', ldb$Content, ignore.case = TRUE)] <- 'Permissive'

(而且,正如前面的答案所提到的,请小心数据帧和列名中的输入。)

票数 6
EN

Stack Overflow用户

发布于 2020-06-22 16:45:43

使用base R

代码语言:javascript
复制
ldb$EffectRP <- sapply(ldb$Content, 
                       function(x) if (grepl("no law", x, ignore.case = TRUE)) {"Permissive"} else {"Restrictive"} )

使用dplyrstringr

代码语言:javascript
复制
ldb %>%
  mutate(EffectRP2 = ifelse(str_detect(Content, "no law"), "Permissive", "Restrictive"))

这些选项返回:

代码语言:javascript
复制
   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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62519059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档