如何计算小计并将其添加到同一数据框?

时间:2019-05-17 07:22:20

标签: r

我有以下数据框(前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%

我需要按“ PT”列上的组计算“ FA”列上的小计。例如:总共有4个“ forma-base”。

我不是专家,但是我知道简单地计算小计并不难。我使用margin.table(tabelaIOPT,2),它完美地显示了结果。问题是我稍后将进行一些统计测试,并且我需要在同一数据框中显示这些小计。

这是我已经尝试过的:

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

这些“小计”很简单(当它是一个表时,在我将其制成数据框之前):

    subtotals <- margin.table(tableIOPT,2)

尤其是tableIOPT有99行。但是我还有很多其他具有相同配置的数据帧。

在这种情况下,预期结果为:“ 4、4、7、10、7、19、13、2、6”表示“形式基础,模态,n-oientorado_gerúndio,n-o-orientado_infinitivo,não-orientado_particípio, orientado_finito_passado,orientado_finito_presente,orientado_não-finito_imperativo,“零”。

这就是为什么我在末尾添加第五列,然后尝试在其中“粘贴”结果的原因。但是,此循环仅适用于小计向量的最后一个元素。

2 个答案:

答案 0 :(得分:0)

这是您要寻找的吗?

library(dplyr)
tableIOPT %>%
    group_by(PT) %>%
    mutate(subtotals = sum(FA))

答案 1 :(得分:0)

使用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"]