Как я могу сгруппировать переменные, когда функции dplyr и base R не работают? - PullRequest
1 голос
/ 05 мая 2019

Мне нужно сгруппировать данные по идентификаторам провинций (MUN_RESID) и населению (V16). Мой фрейм данных содержит 8 627 071 наблюдение. Уже несколько дней я пробую решения, представленные на этом форуме, такие как this и this , но ничего не работает. Любая помощь по этому вопросу будет принята с благодарностью. Большое спасибо

Вот как выглядит образец:

          X MUN_RESID   V16 X08.2005_P  X09.2005_P X10.2005_P
1             1    110001 13203          0 0.007574036          0
2             2    110001 13203          0 0.007574036          0
3             3    110001 13203          0 0.007574036          0
4             4    110001 13203          0 0.007574036          0
5             5    110001 13203          0 0.007574036          0
6             6    110001 13203          0 0.007574036          0
7             7    110001 13203          0 0.007574036          0
8627069 8627069    530010 14802          0 0.000000000          0
8627070 8627070    530010 14802          0 0.000000000          0
8627071 8627071    530010 14802          0 0.000000000          0


==X==============================================================X==
     Copy+Paste this part. (If on a Mac, it is already copied!)
==X==============================================================X==

 months0606 <- structure(list(X = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8627069L, 8627070L,8627071L),
          MUN_RESID = c(110001L, 110001L, 110001L,
          110001L,110001L, 110001L, 110001L, 530010L, 530010L, 530010L),
          V16 = c(13203L,13203L, 13203L, 13203L, 13203L, 13203L, 13203L, 14802L, 14802L,14802L),
          X08.2005_P = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
          X09.2005_P = c(0.00757403620389305,0.00757403620389305,
          0.00757403620389305, 0.00757403620389305,0.00757403620389305,
          0.00757403620389305, 0.00757403620389305,0, 0, 0),
          X10.2005_P = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
          0)), class = "data.frame", row.names =
          c(1L,2L, 3L, 4L, 5L, 6L, 7L, 8627069L, 8627070L, 8627071L))





==X==============================================================X==

Я пытался

months0606_grouped <- ddply(months0606, .(V16))

(вообще ничего не выводит)

library(dplyr)
months0606 %>% group_by(MUN_RESID, V16)
months0606 %>% dplyr::group_by(MUN_RESID)

(не выдает никаких предупреждений об ошибках, но и не группирует. Это вывод:

# A tibble: 8,627,071 x 20
# Groups:   MUN_RESID [5,227]
       X MUN_RESID   V16 X08.2005_P X09.2005_P X10.2005_P
   <int>     <int> <int>      <dbl>      <dbl>      <dbl>
 1     1    110001 13203          0    0.00757          0
 2     2    110001 13203          0    0.00757          0
 3     3    110001 13203          0    0.00757          0
 4     4    110001 13203          0    0.00757          0
 5     5    110001 13203          0    0.00757          0
 6     6    110001 13203          0    0.00757          0
 7     7    110001 13203          0    0.00757          0
 8     8    110001 13203          0    0.00757          0
 9     9    110001 13203          0    0.00757          0
 10    10    110001 13203          0    0.00757          0
# ... with 8,627,061 more rows, and 14 more variables:
#   X11.2005_P <dbl>, X12.2005_P <dbl>,
#   X01.2006_P <dbl>, X02.2006_P <dbl>,
#   X03.2006_P <dbl>, X04.2006_P <dbl>,
#   X05.2006_P <dbl>, X06.2006_P <dbl>,
#   X07.2006_P <dbl>, X08.2006_P <dbl>,
#   X09.2006_P <dbl>, X10.2006_P <dbl>,
#   X11.2006_P <dbl>, X12.2006_P <dbl>

Также пробовал:

months0606$V16 <- with(months0606, ifelse(V16 %in% months0606, "V16"))

Моя цель состоит в том, чтобы мой фрейм данных выглядел так: Каждая комбинация MUN_RESID и уровня населения (V16) содержит только одну строку:

MUN_RESID   V16     X08.2005_P  X09.2005_P 
110001      13203   0           0.007507
530010      530010  0           0

1 Ответ

0 голосов
/ 05 мая 2019

Если вы просто ищете уникальные строки MUN_RESID и V16 - вы можете использовать дублированную функцию

months0606[ !duplicated( months0606[ , c( "MUN_RESID","V16")]) , ]

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

library( data.table )
months0606 <- data.table( months0606 )
months0606[ , .( 
    X08.2005_P=mean(X08.2005_P),
    X09.2005_P=mean( X09.2005_P)
    ),
    by=c("MUN_RESID" ,  "V16" )]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...