1

我正在尝试做一些相当简单的事情(我认为),但我无法理解它。我正在尝试编写一个循环来检查数据框中的字符变量是否包含任何特定的子字符串列表,并将相应的值分配给虚拟变量。

因此,想象一个带有变量的 data.frame,n=2000 data.frame$text。此外,我有一个字符向量,其中包含我想要为其发送文本的所有子字符串data.frame$text。让我们称之为hillary_exists

hillary_exists <- c("Hilary Clinton", "hilary clinton","hilaryclinton", "hillaryclinton", "HilaryClinton",
                    "HillaryClinton","Hillary Clinton", "Hillary Rodham Clinton", "Hillary", "Hilary", "#Hillary2016", "#ImWithHer",
                    "Hillary2016", "hillary", "hilary", "Clinton 2016", "Clinton", "Secretary of State Clinton", 
                    "Senator Clinton", "Hilary Rodham", "Hilary Rodham Clinton", "Hilary Rodham-Clinton", "Hillary Rodham-Clinton")

现在,我希望我的循环测试 的每一行data.frame$text是否存在 的每个元素hillary_exists,如果它们中的任何一个是,则为变量TRUE生成一个新的值1data.frame$hillary_mention。这是我尝试过的:

for(i in hillary_exists){
  if(grepl(hillary_exists[i], data.frame$text)){
    data.frame$hillary_mention <- 1
  } else {
    data.frame$hillary_mention <- 0 }
}

但显然我错过了元素的i组件data.frame$text,但我不知道如何解决它。

任何帮助将不胜感激!谢谢

4

1 回答 1

1

我们可以用来让它工作的一种方法是hillary_exists变成一个正则表达式:hillary_regex <- paste(hillary_exists, collapse = "|")。从本质上讲,这只是将您的所有条款转化为一个大的 OR 语句。这会自动为我们处理其中一个循环。接下来,我们只是循环我们的文本列,data.frame$text,使用sapply

data.frame$hillary_mention <- sapply(data.frame$text, function(s) grepl(hillary_regex, s, ignore.case = TRUE))

在这里使用很好,ignore.case = TRUE因为文本中可能会出现未在 中说明的内容hillary_exists,例如“hIllary cLinTon”。

于 2016-01-15T15:16:37.630 回答