Вот простой способ с dplyr
:
library(dplyr)
df %>% group_by(ID) %>%
filter(row_number() <= which.max(condition) | sum(condition) == 0)
# # A tibble: 7 x 3
# # Groups: ID [3]
# ID time condition
# <int> <int> <int>
# 1 1 1 0
# 2 1 2 0
# 3 1 3 0
# 4 1 4 1
# 5 2 1 0
# 6 2 2 1
# 7 3 1 1
Он опирается на which.max
, который возвращает индекс первого первого максимального значения в векторе. | sum(condition) == 0
заботится о сохранении цензуры (где условие всегда равно 0).
Используя эти данные:
1 1 0
1 2 0
1 3 0
1 4 1
2 1 0
2 2 1
2 3 1
2 4 0
3 1 1
3 2 1
3 3 0
3 4 0')
Вы могли судить Jason Rennie> WordNet-QueryData-1.47> WordNet:: QueryData
Одним хорошим местом, чтобы начать исследовать был бы "Word Net" - это - словарь семантики, собирая в группу слова подобным значением и также записью отношений между словами полезными способами.
Существует набор проектов программного обеспечения, усиливающих корпус Word Net, один из них может быть тем, в чем Вы нуждаетесь.
Если Вы не связываетесь с конкретным языком, у Haskell есть Грамматическая Платформа Aarne Ranta:
http://www.grammaticalframework.org/
который явно разработан для генерации синтаксических анализаторов, и т.д. для обработки естественного языка этого вида.
Хорошее место для запуска было бы CARLAStudio SIL для своего "Автоматизированного Связанного комплекта" Адаптации Языка. Кроме того, SIL'S Адаптирует Его. SIL имеет огромный диапазон программного обеспечения лингвистического анализа, которое является направлением, Вы, кажется, идете. Это - конечно, большой переход от регулярных выражений, которые не заботятся о значении к чему-то, что может обработать лингвистический анализ.
Если Вы хотите что-то более устойчивое для синтаксического анализа естественных языков / преобразование, Вы могли бы попробовать порт C# OpenNLP.
Я не знаю ни о каких синтаксисах, которые существуют для английской обработки языка как Вы, обсуждают. Необходимо было бы создать собственный DSL использование одного из наборов инструментов (таких как Word Net) там.