Как рассчитать промежуточные итоги и добавить его к тому же фрейму данных? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть следующий фрейм данных (первые 15 строк), который я назвал "tableIOPT":

        IO                                          PT          FA  FR
    1   não-orientado_gerúndio                      forma-base  0   0%
    2   não-orientado_infinitivo                    forma-base  0   0%
    3   não-orientado_particípio_masculino          forma-base  0   0%
    4   orientado_finito_passado_imperfectivo       forma-base  0   0%
    5   orientado_finito_passado_perfectivo_I       forma-base  0   0%
    6   orientado_finito_passado_volitivo           forma-base  1   100%
    7   orientado_finito_presente                   forma-base  0   0%
    8   orientado_não-finito_imperativo_I           forma-base  0   0%
    9   orientado_não-finito_subjuntivo_condicional forma-base  0   0%
    10  orientado_não-finito_subjuntivo_conjuntivo  forma-base  0   0%
    11  ZERO                                        forma-base  3   27.27%
    12  não-orientado_gerúndio                      modal       0   0%
    13  não-orientado_infinitivo                    modal       0   0%
    14  não-orientado_particípio_masculino          modal       0   0%
    15  orientado_finito_passado_imperfectivo       modal       0   0%

И мне нужно вычислить промежуточные итоги в столбце "FA" по группам в столбце "PT".Например: всего 4 «форм-базы».

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

Это то, что я уже пробовал:

    for (i in length(subtotals))    {
    tableIOPT[grep(names(subtotals)[i],tableIOPT[,2]),5] <- subtotals[i]
                                    }

Эти "промежуточные итоги"просто (когда это была таблица, прежде чем я превратил ее в информационный кадр):

    subtotals <- margin.table(tableIOPT,2)

И, в частности, таблица IOPT имеет 99 строк.Но у меня есть МНОГО других фреймов данных с той же конфигурацией.

Ожидаемые результаты в этом случае: "4, 4, 7, 10, 7, 19, 13, 2, 6" для "форматированияbase, modal, não-ориентация_gerúndio, não-Ориентада_infinitivo, não-сайтеtado_particípio, Ориентада_finito_passado, ориентация_finito_presente, Ориентада_não-finito_imperativo, ZERO ", соответственно. * 1016«вставить» результаты там.Однако этот цикл работает только для последнего элемента вектора промежуточных итогов.

Ответы [ 2 ]

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

Используя data.table, вы можете суммировать по группам как

library(data.table)
# turn your data.frame into a data.table
tableIOPT <- setDT(tableIOPT)
# add a column subtot, containing the original number of rows
tableIOPT <- tableIOPT[, subtot := sum(FA), by = "PT"]
# or simply the subtotals per group
tableIOPT[, list(subtot = sum(FA)), by = "PT"]
0 голосов
/ 17 мая 2019

Это то, что вы ищете?

library(dplyr)
tableIOPT %>%
    group_by(PT) %>%
    mutate(subtotals = sum(FA))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...