Как определить определенные c строк в R (на основе других значений) - PullRequest
0 голосов
/ 06 мая 2020

Для моего набора данных мне нужна строка для каждого года для каждого идентификатора, и я хочу определить, жили ли они в городской местности или нет (0/1). Поскольку некоторые удостоверения личности перемещены в течение года и, следовательно, имеют две строки для этого года, я хочу определить, есть ли у них две строки для указанного c года, что означает, что они жили в этом году в городской и загородной местности (так Я могу вручную определить в Excel, где они принадлежат).

Я уже исключил точные двойные строки (поэтому они переехали в определенный год, но урбанизация не изменилась).

df <- df %>% distinct(ID, YEAR, URBAN, .keep_all = TRUE)




structure(t2A)
    # A tibble: 3,177,783 x 4
       ID ZIPCODE YEAR URBAN
            <dbl> <chr>  <chr> <dbl>
     1   1 1234AB   2013     0
     2   1 1234AB   2014     0
     3   1 1234AB   2015     0
     4   1 1234AB   2016     0
     5   1 1234AB   2017     0
     6   1 1234AB   2018     0
     7   2 5678CD   2013     0
     8   2 5678CD   2014     0
     9   2 5678CD   2015     0
    10   2 5678CD   2016     0
    # ... with 3,177,773 more rows

structure(list(ID= c(1, 1, 1, 1
), YEAR = c("2013", "2014", "2015", "2016"), URBAN = c(0, 
0, 0, 0)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", 
"data.frame"))

Ребята, не могли бы вы мне помочь с определением идентификаторов, которые имеют две строки для определенного c года / имеют 0 и 1 в том же году?

Изменить: пример не соответствует не показывает никаких удостоверений личности с урбанизацией 1, но есть и не все удостоверения личности включены во все годы :)

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Ниже может быть полезно:

df <- df %>%
  dplyr::group_by(ID, YEAR) %>%
  dplyr::mutate(nIds=dplyr::n(),#count the occurance at unique ID and year combination
         URBAN_Flag=sum(URBAN), ##Urban flag for those who are from urban
         moved=dplyr::if_else(nIds>1,1,0)) %>% 
  dplyr::select(-c(nIds))

Вы можете отменить выбор столбцов, если они не нужны

0 голосов
/ 06 мая 2020

Сначала мы создаем фиктивные данные

library(tidyverse)

db <- tibble(
  id = c(1, 1, 1, 2, 2, 2),
  year = c(2000, 2000, 2001, 2001, 2002, 2003),
  urban = c(0, 1, 0, 0, 0, 0)
)

Мы видим, что этот человек переехал в 2000 году.

     id  year urban
  <dbl> <dbl> <dbl>
1     1  2000     0
2     1  2000     1
3     1  2001     0
4     2  2001     0
5     2  2002     0
6     2  2003     0

Теперь мы можем сгруппировать по id и year и подсчитайте количество строк. Мы можем использовать значение счетчика для создания фиктивной переменной независимо от того, двигались ли они в данном году.

db %>%
  group_by(id, year) %>%
  summarize(rows = n()) %>%
  mutate(
    moved = ifelse(rows == 2, 1, 0)
  )

Что дает результат:

     id  year  rows moved
  <dbl> <dbl> <int> <dbl>
1     1  2000     2     1
2     1  2001     1     0
3     2  2001     1     0
4     2  2002     1     0
5     2  2003     1     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...