С data.table
:
# set seed for reproducibility
set.seed(1)
# data frame
df <- data.frame(Date = sample(seq(as.Date("2019-01-01"), as.Date("2019-01-09"), by = "days"), 30, replace = T),
Min = sample(c(0:5), 30, replace = T), stringsAsFactors = F)
# load packages
library(magrittr)
library(data.table)
# make df into data.table
setDT(df)
# establish which Date values have Min = 0
minVals <- df[Min == 0, unique(Date)]
# Count date and set those rows with Date Min = 0 to 0
res <- df[, .N, by = 'Date'][
Date %in% minVals, N := 0
]
Результат:
> res
Date N
1: 2019-01-03 0
2: 2019-01-04 0
3: 2019-01-06 0
4: 2019-01-09 5
5: 2019-01-02 5
6: 2019-01-01 2
7: 2019-01-07 0
8: 2019-01-05 1
9: 2019-01-08 1
Было бы неплохо, если бы вы опубликовали фрагмент своих данных таким образом, чтобы мы могли на самом деле проверить их при попытке дать ответ. Попробуйте dput(head(df, 10))
, R
отобразит на консоли вывод, который должен быть фрагментом кода, который создает фрагмент ваших фактических данных.
A dplyr
решение:
library(dplyr)
count(df, Date) %>%
mutate(n = ifelse(Date %in% pull(filter(df, Min == 0), Date), 0, n))
В результате:
# A tibble: 9 x 2
Date n
<date> <dbl>
1 2019-01-01 2
2 2019-01-02 5
3 2019-01-03 0
4 2019-01-04 0
5 2019-01-05 1
6 2019-01-06 0
7 2019-01-07 0
8 2019-01-08 1
9 2019-01-09 5