Подсчет Количество дел, приходящихся на 20 дней - PullRequest
0 голосов
/ 06 августа 2020

У меня есть data.frame, который показывает уровень преступности. Когда в городе впервые сообщается о преступлении, мы записываем его как 0. Мы хотим сравнивать первое преступление, совершенное городом, с другими преступлениями, пока не найдем преступление, между которыми есть 20 дней. Когда это происходит, мы берем этот день преступления и сравниваем его с другими преступлениями в городе, пока не найдем 20 дней. Мы кодируем это с помощью 0 и 1, и первое преступление для города всегда получает 0.

Я знаю, что это может сбивать с толку, поэтому нижеприведенный data.frame, надеюсь, лучше объясняет ситуацию:

City     Days
City1    0
City1    4
City1    20
City2    0
City2    20
City3    0
City3    20
City3    30

Итак, результирующий data.frame будет

City     Days  Result
City1    0.     1
City1    4.     0
City1    20.    1
City2    0.     1
City2    20.    1
City3    0.     1
City3    20.    1
City3    30.    0

Сейчас у меня есть запутанный вложенный l oop, который проходит через города и их инциденты. Я создал индекс, который изменяется, если разница в преступлении в городах больше 20. Я затем обновляю его. Однако это стало утомительным и ужасным подходом. Любые альтернативы были бы признательны.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вы можете использовать lag для смещения столбца дней, чтобы найти разницу между днями преступления:

library(dplyr)

df <- read.table(text = "City     Days
City1    0
City1    4
City1    20
City2    0
City2    20
City3    0
City3    20
City3    30", header = TRUE) %>%
  as_tibble()


df %>%
  group_by(City) %>%
  mutate(tmp = lag(Days),
         Result = ifelse(Days - tmp >= 20 | is.na(tmp), 1, 0)) %>%
  select(-tmp)
0 голосов
/ 06 августа 2020

возможно вы ищете это решение

library(tidyverse)
df %>% 
  group_by(City) %>% 
  mutate(res = +(c(20, diff(Days)) >= 20)) %>%
  ungroup()

# A tibble: 8 x 3
  City   Days   res
  <chr> <int> <int>
1 City1     0     1
2 City1     4     0
3 City1    20     0
4 City2     0     1
5 City2    20     1
6 City3     0     1
7 City3    20     1
8 City3    30     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...