У меня есть data.frame, который имеет 3 столбца: имя агента, классификация (A, B, C или D) и номера недели, т. Е. Week1, Week2 et c.
Агенты могут быть в течение нескольких недель, имея одну из 4 категорий. В настоящее время у меня есть данные до 10 недель.
Я хочу создать подмножество, которое имеет «A» в качестве категории и доступно во всех: Week8, Week9 и Week10 (последние 3 недели).
В настоящее время я построил эту функцию для достижения желаемых результатов: -
cautionAgentsLocator = function(classification){
cautionAgents = NA
if(classification == "Bad"){
cautionAgents = combData[combData$ABCD.Categorization == "D", ]
cautionAgents = cautionAgents[cautionAgents$Weeks == "Week8" | cautionAgents$Weeks == "Week9" | cautionAgents$Weeks == "Week10", ]
cautionAgents = cautionAgents[, c("Agent.Name", "SPD", "Normalized.Distribution", "ABCD.Categorization", "Weeks")]
}
if(classification == "Good"){
cautionAgents = combData[combData$ABCD.Categorization == "A", ]
cautionAgents = cautionAgents[cautionAgents$Weeks == "Week8" | cautionAgents$Weeks == "Week9" | cautionAgents$Weeks == "Week10", ]
cautionAgents = cautionAgents[, c("Agent.Name", "SPD", "Normalized.Distribution", "ABCD.Categorization", "Weeks")]
}
uniqueName = unique(cautionAgents$Agent.Name)
for(i in uniqueName){
count = nrow(cautionAgents[cautionAgents$Agent.Name == i, ])
missingWeeks = setdiff(c("Week8", "Week9", "Week10"), cautionAgents$Weeks[cautionAgents$Agent.Name == i])
if(count < 3){
cautionAgents = cautionAgents[-which(cautionAgents$Agent.Name == i), ]
}
}
Может ли это быть достигнуто с помощью одной строки кода, т. Е. Одного оператора поднабора, с использованием dplyr или каким-то лучшим способом?
Чтобы создать только часть данных, вот код: -
structure(list(Agent.Name = c("Christy Deruise", "Allen Voorhees",
"Daniel Gonzalez Gaviria", "Denise Bradley", "Shimron Larose",
"Tiana Morman", "James Cagle Jr", "Vicki Smith", "Donna Paskett",
"Joan Balde"), ABCD.Categorization = c("D", "D", "D", "D", "D",
"D", "D", "D", "D", "D"), Weeks = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Week1", "Week2", "Week3",
"Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10"
), class = "factor")), row.names = c(NA, 10L), class = "data.frame")
Но, конечно, фактические данные имеют около 4000 строк, где каждый агент присутствует в течение нескольких недель, имея разные категоризации для каждой недели.