, поэтому у меня есть БОЛЬШОЙ набор данных, но мне нужно реализовать сложную систему фильтрации данных.Я думаю, что я мог бы использовать dplyr и group_by, но я пытаюсь понять, как реализовать оператор IF в группах.
Вот то, что я пытался и думал, что это сработало, но я думаю, что может быть проблемас индексацией и, таким образом, получить несколько ИСТИНА / ЛОЖЬ на группу.Я не уверен, как бы я индексировал хотя бы в каждой группе.
Например, в приведенном ниже примере, если группа GP содержит строку «a», то сохраните все записи, у которых Var4 равен J или J1 (для этого я мог бы сделать ", который содержит букву" J "), но если группа GP содержит строку" b "и также имеет строку" 2 "(опять-таки, это простое число, но на самом деле это будеткомбинирование строки и числа для всего), затем сохраните записи, где Var4, если «J», но если группа GP содержит строку «b» и также имеет строку «3», то сохраните записи, где Var4, если «U» ...здесь есть случаи в этом примере, но в конечном итоге я давал правила, которые мне нужно применять, и у меня было бы более 300 таких «ЕСЛИ у группы есть эти качества, тогда сохраняйте эти записи».
testing <- data.frame(var1 = c("a", "a", "b", "b","a", "a","b", "b"),
var2 = c(1, 1, 2, 2, 1, 1, 3, 3),
var3 = c("A", "A", "A", "A","B", "B","B", "B"),
var4 = c("U", "J", "J", "A", "1", "J1", "U", "A"))
testing$GP <- paste(testing$var1,testing$var2, testing$var3, sep = "-")
cleaned <- testing %>%
group_by("GP") %>%
if (grepl("a", testing$GP)){
filter(testing, testing$var4 == "J" | testing, testing$var4 == "J1")
} else if (grepl("b", testing$GP) & grepl("2", testing$GP)){
filter(testing, testing$var4 == "J")
} else if (grepl("b", testing$GP) & grepl("3", testing$GP)){
filter(testing, testing$var4 == "U")
}
В конечном итоге я хотел бы получить эквивалентный результат, как показано ниже, но с 100000 записями и возможностью построить 300 необходимых мне условий ("Радость" ;-P)
var1 var2 var3 var4 GP
1 a 1 A U a-1-A
3 b 2 A J b-2-A
6 a 1 B J1 a-1-B
7 b 3 B U b-3-B
Что мне нужно, чтобы иметь возможность условноотфильтровыватьбезумное количество данных на основе условий, примененных к трем переменным.Например, мне нужно, для каждой отдельной уникальной группы из трех переменных (например, b-3-B, если вы ищете последнюю группу), сохранять записи, которые соответствовали бы результату (например, «U»), но только есливыполняется некоторое условие (например, «GP» содержит строку «b» и строку «3»).Но я должен сделать это для 300 различных групп, которые иногда имеют сложные операторы IF (например, для GP, сохраняйте записи с результатом «U» в 4-х переменных, если «GP» содержит определенную строку «EG», но если он имеетСтрока "RT", а затем сохранить записи, которые являются "J" в 4-х переменных ...
спасибо. Sab