Попытка создать данные панели из данных поперечного сечения - PullRequest
1 голос
/ 24 сентября 2019

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

Iнам удалось создать фрейм данных, в котором все столбцы содержат все комбинации Country_Year в качестве одной переменной.Я также обнаружил, что с помощью `´table (GTD_94_Land $ country_txt, GTD_94_Land $ iyear) ´ в таблице показаны значения, которые я хотел бы получить в новой переменной.Что я не могу понять, так это как хранить это число в качестве переменной.

Итак, мои данные выглядят так:

        eventid iyear crit1 crit2 crit3 country country_txt
      <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl> <chr>      
 1 199401010008  1994     1     1     1     182 Somalia    
 2 199401010012  1994     1     1     1     209 Turkey     
 3 199401010013  1994     1     1     1     209 Turkey     
 4 199401020003  1994     1     1     1     209 Turkey     
 5 199401020007  1994     1     1     0     106 Kuwait     
 6 199401030002  1994     1     1     1     209 Turkey     
 7 199401030003  1994     1     1     1     228 Yemen      
 8 199401030006  1994     1     1     0      53 Cyprus     
 9 199401040005  1994     1     1     0     209 Turkey     
10 199401040006  1994     1     1     0     209 Turkey     
11 199401040007  1994     1     1     1     209 Turkey     
12 199401040008  1994     1     1     1     209 Turkey 

, и я хотел бы преобразовать их так, чтобы у меня было

Terror attacks iyear crit1 crit2 crit3 country country_txt
          <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl> <chr>      
 1 1  1994     1     1     1     182 Somalia    
 2 8  1994     1     1     1     209 Turkey     
 5 1  1994     1     1     0     106 Kuwait     
  7 1  1994    1     1     1     228 Yemen      
 8 1  1994     1     1     0      53 Cyprus     
´´´

I've looked at some solutions but most of them seems to assume that the number the new variable should have already is in the data. 

All help is appreciated!

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Предполагая, что df является исходным фреймом данных:

df_out = df %>% 
  dplyr::select(-eventid) %>% 
  dplyr::group_by(country_txt,iyear) %>% 
  dplyr::mutate(Terrorattacs = n()) %>% 
  dplyr::slice(1L) %>% 
  dplyr::ungroup()

В идеале я хотел бы использовать суммирование, но, поскольку я не знаю критериев суммирования для других столбцов, я просто использовал mutate и slice.

Примечание. Значения столбцов «крит» будут первыми вхождениями «country_txt» и «iyear».

0 голосов
/ 24 сентября 2019

Вот решение data.table.Если набор данных уже отфильтрован, чтобы crit1 и crit2 были равны 1 (который вы указали в качестве условия в комментарии), вы можете удалить первый аргумент (crit1 == 1 & crit2 == 1)

library(data.table)
set.seed(1011)

dat <- data.table(eventid = round(runif(100, 1000, 10000)),
                  iyear = sample(1994:1996, 100, rep = T),
                  crit1 = rbinom(100, 1, .9),
                  crit2 = rbinom(100, 1, .9),
                  crit3 = rbinom(100, 1, .9),
                  country = sample(1:3, 100, rep = T))
dat[, country_txt := LETTERS[country]]

## remove crit variables
dat[crit1 == 1 & crit2 == 1, .N, .(country, country_txt, iyear)]
#>    country country_txt iyear  N
#> 1:       1           A  1994 10
#> 2:       1           A  1995  4
#> 3:       3           C  1995 10
#> 4:       1           A  1996  7
#> 5:       2           B  1996  9
#> 6:       3           C  1996  5
#> 7:       2           B  1994  8
#> 8:       3           C  1994 13
#> 9:       2           B  1995 10

Создано в 2019-09-24 пакетом представительство (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...