R - 遍历 2 个对象
R - looping across 2 objects
我正在尝试做一些相当简单的事情(我认为),但我无法理解它。我正在尝试编写一个循环来检查数据框中的字符变量是否包含特定子字符串列表中的任何一个,并将相应的值分配给虚拟变量。
所以,想象一个 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
, 为变量 data.frame$hillary_mention
生成新值 1
。这是我试过的:
for(i in hillary_exists){
if(grepl(hillary_exists[i], data.frame$text)){
data.frame$hillary_mention <- 1
} else {
data.frame$hillary_mention <- 0 }
}
但显然我缺少 data.frame$text
元素的 i
组件,但我不知道如何解决它。
如有任何帮助,我们将不胜感激!谢谢
我们可以用来让它工作的一种方法是将 hillary_exists
变成一个正则表达式:hillary_regex <- paste(hillary_exists, collapse = "|")
。从本质上讲,这只是将您的所有术语变成一个大的 OR 语句。这会自动为我们处理其中一个循环。接下来,我们使用 sapply
遍历我们的文本列 data.frame$text
。
data.frame$hillary_mention <- sapply(data.frame$text, function(s) grepl(hillary_regex, s, ignore.case = TRUE))
这里最好使用ignore.case = TRUE
,因为文中可能会提到hillary_exists
中没有提到的内容,例如"hIllary cLinTon".
我正在尝试做一些相当简单的事情(我认为),但我无法理解它。我正在尝试编写一个循环来检查数据框中的字符变量是否包含特定子字符串列表中的任何一个,并将相应的值分配给虚拟变量。
所以,想象一个 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
, 为变量 data.frame$hillary_mention
生成新值 1
。这是我试过的:
for(i in hillary_exists){
if(grepl(hillary_exists[i], data.frame$text)){
data.frame$hillary_mention <- 1
} else {
data.frame$hillary_mention <- 0 }
}
但显然我缺少 data.frame$text
元素的 i
组件,但我不知道如何解决它。
如有任何帮助,我们将不胜感激!谢谢
我们可以用来让它工作的一种方法是将 hillary_exists
变成一个正则表达式:hillary_regex <- paste(hillary_exists, collapse = "|")
。从本质上讲,这只是将您的所有术语变成一个大的 OR 语句。这会自动为我们处理其中一个循环。接下来,我们使用 sapply
遍历我们的文本列 data.frame$text
。
data.frame$hillary_mention <- sapply(data.frame$text, function(s) grepl(hillary_regex, s, ignore.case = TRUE))
这里最好使用ignore.case = TRUE
,因为文中可能会提到hillary_exists
中没有提到的内容,例如"hIllary cLinTon".