Как агрегировать данные, которые имеют три измерения? - PullRequest
0 голосов
/ 30 января 2020

После обработки данных у меня есть набор данных примерно такой:

enter image description here

И вы можете найти набор данных здесь: http://www.sharecsv.com/s/361731b8a7236a8ae147584e44518872/dfk.csv

В случае, если вы не можете получить доступ к данным, вот пример:

dfk <- tribble(
  ~group,           ~date,       ~id,         ~share,       ~status,
'FALSE',        'January 20',   '25092',   '0,050904271%',   'A',     
'NA',           'April 19',     '29374',   '60,584652862%',  'B',     
'TRUE',         'January 20',   '22625',   '87,401561145%',  'B',     
'TRUE',         'January 20',   '315618',  '99,697519661%', 'A',     
'FALSE & TRUE', 'January 20',   '31002',   '100%         ',  'C',     
'TRUE',         'April 19',     '21788',   '99,836975729%',  'A',     
'TRUE',         'January 20',   '1362',    '76,418519990%',  'A',     
'NA',           'January 20',   '29374',   '59,873882219%',  'C',     
'TRUE',         'April 19',     '9961',    '45,869691681%',  'A',     
'FALSE',        'January 20',   '62184',   '33,833598912%',  'A', 
)

В наборе данных есть только две даты: апрель 19 и 20 января. В дополнение к этому у меня есть три аспекта, которые важны для моего анализа: группа, идентификатор и статус. Рассматривая все эти переменные, я хотел бы увидеть, как доля изменилась с 19 апреля по 20 января.

Я уже показал желаемые данные на следующем рисунке:

enter image description here

Я был бы рад, если бы вы могли помочь мне сделать это. Заранее спасибо.

1 Ответ

2 голосов
/ 30 января 2020

1) Преобразовать общий ресурс в число c и создать из него таблицу xt. Затем отобразите таблицу, используя ftable. Теперь вы можете удалить или объединить любые столбцы, которые у вас есть sh, или, возможно, просто оставить все как есть или посмотреть (2) ниже. Пакеты не используются.

dfk$share <- as.numeric(chartr(",%", ". ", dfk$share))
xt <- xtabs(share ~., dfk)
ftable(xt, row.vars = "id", col.vars = c("status", "group"))

, давая:

       status            A                                                   B                                                   C                                       
       group         FALSE FALSE & TRUE           NA         TRUE        FALSE FALSE & TRUE           NA         TRUE        FALSE FALSE & TRUE           NA         TRUE
id                                                                                                                                                                       
1362            0.00000000   0.00000000   0.00000000  76.41851999   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
21788           0.00000000   0.00000000   0.00000000  99.83697573   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
22625           0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000  87.40156115   0.00000000   0.00000000   0.00000000   0.00000000
25092           0.05090427   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
29374           0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000  60.58465286   0.00000000   0.00000000   0.00000000  59.87388222   0.00000000
31002           0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000 100.00000000   0.00000000   0.00000000
315618          0.00000000   0.00000000   0.00000000  99.69751966   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
62184          33.83359891   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
9961            0.00000000   0.00000000   0.00000000  45.86969168   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000

2) Предполагая, что share был преобразован в число c, как указано выше, альтернативой является data.table:

library(data.table)
dcast(data = dfk, id ~ status + group, value.var = "share", fill = 0)

дача:

      id     A_FALSE   A_TRUE     B_NA   B_TRUE C_FALSE & TRUE     C_NA
1   1362  0.00000000 76.41852  0.00000  0.00000              0  0.00000
2  21788  0.00000000 99.83698  0.00000  0.00000              0  0.00000
3  22625  0.00000000  0.00000  0.00000 87.40156              0  0.00000
4  25092  0.05090427  0.00000  0.00000  0.00000              0  0.00000
5  29374  0.00000000  0.00000 60.58465  0.00000              0 59.87388
6  31002  0.00000000  0.00000  0.00000  0.00000            100  0.00000
7 315618  0.00000000 99.69752  0.00000  0.00000              0  0.00000
8  62184 33.83359891  0.00000  0.00000  0.00000              0  0.00000
9   9961  0.00000000 45.86969  0.00000  0.00000              0  0.00000
...