Краткий ответ:
df$Event <- sapply(tolower(df$Col2), function(el) el %in% sentences)
делает то, что вы хотите в цикле for.
В R вы должны избегать циклов for и пытаться использовать функции apply
-семейства .
tolower
делает содержимое df $ Col2 строчными.
Для каждого элемента этого вектора столбца определенная функция function(el) el %in% sentences
имеет значение apply (она спрашивает, является ли каждый элемент частью символьного вектора sentences
, и дает ли логический результат сначала собирается в список, но затем пытается s включить собранные результаты далее в вектор (sapply
).
Полная рабочая версия кода:
Считывание и подготовка данных
sentences <- unlist(strsplit("cat ate rat, rat was killed, cat killed the rat, rat killed by rat",", "))
просто для того, чтобы заменить заданный вами текст на фрейм данных
txt2df <- function(dfstr) {
lines <- unlist(strsplit(txt, "\n"))
l <- unlist(lapply(lines,strsplit, "\ {2, }"), recursive = FALSE)
df <- as.data.frame(Reduce(rbind, l[2:length(l)]), row.names = FALSE)
colnames(df) <- l[[1]]
df
}
применить функцию к многострочной строке для получения data.frame:
df <- txt2df("Id Col2 Col3 Col4 Col5
1 This cat 05-09-2001 04-10-2000 09-14-2001
2 This cat ate a rat 05-04-2011 05-01-2011 05-14-2011
3 Cat was killed 02-04-2015 02-01-2015 03-12-2015
4 Cat killed the rat 10-06-2014 09-20-2014 10-11-2014
5 Rat ran away 03-12-2008 04-12-2015 04-20-2015")
df
Id Col2 Col3 Col4 Col5
1 1 This cat 05-09-2001 04-10-2000 09-14-2001
2 2 This cat ate a rat 05-04-2011 05-01-2011 05-14-2011
3 3 Cat was killed 02-04-2015 02-01-2015 03-12-2015
4 4 Cat killed the rat 10-06-2014 09-20-2014 10-11-2014
5 5 Rat ran away 03-12-2008 04-12-2015 04-20-2015
Функция поиска
поиск, если любое из предложений в нижнем регистре значений df $ Col2:
df$Event <- sapply(tolower(df$Col2), function(el) el %in% sentences)
Результат
df
Id Col2 Col3 Col4 Col5 Event
1 1 This cat 05-09-2001 04-10-2000 09-14-2001 FALSE
2 2 This cat ate a rat 05-04-2011 05-01-2011 05-14-2011 FALSE
3 3 Cat was killed 02-04-2015 02-01-2015 03-12-2015 FALSE
4 4 Cat killed the rat 10-06-2014 09-20-2014 10-11-2014 TRUE
5 5 Rat ran away 03-12-2008 04-12-2015 04-20-2015 FALSE