Я пытаюсь найти более элегантный способ извлечения всех строк фрейма данных, если один член группы содержит определенное значение. Например:Какие группы содержат значение - более элегантный код?
id <- c(1,1,2,2,2,3,4,4,5,5)
cat <- c("A", "B", "A", "B", "C", "B", "C", "D", "A", "E")
mydf <- data.frame(id, cat)
id cat
1 A
1 B
2 A
2 B
2 C
3 B
4 C
4 D
5 A
5 E
Я хотел бы создать новый фрейм данных с всех строк из идентификаторов, которые содержат C, в этом случае все строки из идентификатора 2 и идентификатором 4, а не только те строки, содержат C.
Я сделал это так, но я думаю, что должно быть более элегантный способ сделать это без создания 2 дополнительных столбцов:
mydf$isC <- ifelse(cat=="C", TRUE, FALSE)
library(dplyr)
newdf <- mydf %>%
group_by(id) %>%
mutate(
hasC = ifelse(any(isC), TRUE, FALSE)
) %>%
filter(hasC)