В настоящее время я пытаюсь применить функцию суммирования, чтобы выделить соответствующие наблюдения из большого набора данных.Здесь приведен простой воспроизводимый пример:
df <- data.frame(c(1,1,1,2,2,2,3,3,3), as.logical(c(TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,FALSE)),
as.numeric(c(0,5,0,0,0,0,7,0,7)))
colnames(df) <- c("ID", "Status", "Price")
ID Status Price
1 1 TRUE 0
2 1 FALSE 5
3 1 TRUE 0
4 2 TRUE 0
5 2 TRUE 0
6 2 TRUE 0
7 3 FALSE 7
8 3 TRUE 0
9 3 FALSE 7
Я хотел бы отсортировать таблицу по наблюдениям и получить статус ИСТИНА, только если все три наблюдения ИСТИННЫ (вычислены), а затем хотите получить цену, соответствующуюк состоянию (т. е. 5 для наблюдения 1 как ЛОЖЬ, 0 для наблюдения 2 как ИСТИНА и 7 для наблюдения 3 как ЛОЖЬ).
С Суммируем с условиями в dplyr Я понял, чтоЯ могу, как обычно, указать условия в квадратных скобках.Таким образом, мой код выглядит так:
library(dplyr)
result <- df %>%
group_by(ID) %>%
summarize(Status = all(Status), Test = ifelse(all(Status) == TRUE,
first(Price[Status == TRUE]), first(Price[Status == FALSE])))
# This is what I get:
# A tibble: 3 x 3
ID Status Test
<dbl> <lgl> <dbl>
1 1. FALSE 0.
2 2. TRUE 0.
3 3. FALSE 7.
Но, как видите, для ID = 1 это дает неверную цену.Я пытался это вечно, поэтому я был бы признателен за любую подсказку о том, где я иду не так.