У меня есть фрейм данных с данными, которые выглядят так:
Part Number Vendor Name Position Repair
123 ABC 1 2
NA <NA> 2 4
NA <NA> 3 1
NA <NA> 4 5
NA <NA> 5 6
NA <NA> 6 3
123 XYZ 1 4
NA <NA> 2 5
NA <NA> 3 7
NA <NA> 4 1
NA <NA> 5 2
NA <NA> 6 3
NA <NA> 7 6
У меня сгруппированы номер детали и название поставщика. Всякий раз, когда позиционирует столбец> 3 и восстанавливает == 1, извлекает последующие строки.
Предположим, что в данном примере для номера детали = 123 и имени поставщика = ABC, ремонт == 1 находится на третьей позиции [position = 3] -> Все строки, которые принадлежат part = 123, и имя поставщика = ABC должны быть исключенным.
Part = 123 и имя поставщика = XYZ, ремонт == 1 находится на четвертой позиции. Получите 4-й, 5-й, 6-й и 7-й ряды.
Условие, которое следует учитывать, это рассмотреть строки, где Position> 3 и Repair == 1, извлечь все последующие строки
Пример данных:
Input <- structure(list(`Part Number` = c(123, NA, NA, NA, NA, NA, 123,
NA, NA, NA, NA, NA, NA), `Vendor Name` = c("ABC", NA, NA, NA,
NA, NA, "XYZ", NA, NA, NA, NA, NA, NA), Position = c(1, 2, 3,
4, 5, 6, 1, 2, 3, 4, 5, 6, 7), Repair = c(2, 4, 1, 5, 6, 3, 4,
5, 7, 1, 2, 3, 6)), .Names = c("Part Number", "Vendor Name", "Position",
"Repair"), row.names = c(NA, -13L), class = c("tbl_df", "tbl",
"data.frame"))
Я попробовал следующее, но это не привело к тому, что я хотел:
output_table <- Input %>% group_by(`Part Number`,`Vendor Name`) %>%
mutate(rn=row_number()) %>% filter(rn>=which(pivot$Repair==1)) #Here I'm able to filter subsequent rows where repair==1 but how to exclude the rows which doesn't fall under the mentioned conditions.
output_table <- Input[Input$Position >3 & Input$Repair==1,] # gives me rows matching the condition but I need subsequent rows once the condition is met