1

创建 DF 的子集示例(实际部分的代码在最后)

ANO_CENSO  PK_COD_TURMA  PK_COD_ENTIDADE  MAIS_ENSINO_FUND  MAIS_ENSINO_MED  ENSINO_INTEG_FUND  ENSINO_INTEG_MED  
2011       27            12               1                 0                0                  1
2011       41            12               1                 1                0                  0
2011       18            13               0                 0                0                  1
2011       16            14               1                 1                0                  1

我想将具有相同 PK_COD_ENTIDADE 值的行合并为一个,并为具有相同 PK_COD_ENTIDADE 的假人保留值“1”。我不关心 PK_COD_TURMA 中的不同值,不管一个留在最后的 DF(27 还是 41)。我的 DF 有多个变量,例如 PK_COD_TURMA,我不关心最终值,重要的是 PK_COD_ENTIDADE 和值为“1”的假人最后看起来像这样:

ANO_CENSO  PK_COD_TURMA  PK_COD_ENTIDADE  MAIS_ENSINO_FUND  MAIS_ENSINO_MED  ENSINO_INTEG_FUND  ENSINO_INTEG_MED  
2011       27            12               1                 1                0                  1
2011       18            13               0                 0                0                  1
2011       16            14               1                 1                0                  1

看看我如何在 PK_COD_ENTIDADE = 12 的第一次观察中获得 2 个假人的值“1”和另一个 PK_COD_ENTIDADE = 12 的假人中的另一个值“1”,最后它们合并在一个单一的观察中相同的 PK_COD_ENTIDADE保持不同的假人“1”(对于不同的观察,相同的假人与1的总和不等于2,因为它们是假人)

我不知道该怎么做,我用 dplyr 搜索了一些解决方案,但无法应用任何接近工作的东西......

这是包含所有变量的 df 的结构:

dftest2 <- structure(list(ANO_CENSO = c(2011, 2011, 2011, 2011), PK_COD_TURMA = c(27, 
                                                                   41, 18, 16), NU_DURACAO_TURMA = c(250, 255, 255, 
                                                                                                                 255), FK_COD_ETAPA_ENSINO = c(41, 19, 19, 19), PK_COD_ENTIDADE = c(12, 
                                                                                                                                                                                    12, 13, 14), FK_COD_ESTADO = c(11, 11, 11, 
                                                                                                                                                                                                                                     11), SIGLA = c("RO", "RO", "RO", "RO"), FK_COD_MUNICIPIO = c(1100023, 
                                                                                                                                                                                                                                                                                                  1100023, 1100023, 1100023), ID_LOCALIZACAO = c(1, 1, 1, 1), ID_DEPENDENCIA_ADM = c(2, 
                                                                                                                                                                                                                                                                                                                                                                                     2, 2, 2), MAIS_ENSINO_FUND = c(1, 1, 0, 1), MAIS_ENSINO_MED = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                     1, 0, 1), ENSINO_INTEG_FUND = c(0L, 0L, 0L, 0L), ENSINO_INTEG_MED = c(1L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0L, 1L, 1L)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           "data.frame"))
4

1 回答 1

1

您提供的示例数据dftest2与您在帖子开头提供的数据不匹配。

针对您的问题,一个选项是使用aggregate

aggregate(
    . ~ PK_COD_ENTIDADE, 
    data = transform(dftest2, SIGLA = as.factor(SIGLA)), 
    FUN = max)
#P  K_COD_ENTIDADE ANO_CENSO PK_COD_TURMA NU_DURACAO_TURMA FK_COD_ETAPA_ENSINO
#1              12      2011           41              255                  41
#2              13      2011           18              255                  19
#3              14      2011           16              255                  19
#  FK_COD_ESTADO SIGLA FK_COD_MUNICIPIO ID_LOCALIZACAO ID_DEPENDENCIA_ADM
#1            11     1          1100023              1                  2
#2            11     1          1100023              1                  2
#3            11     1          1100023              1                  2
#  MAIS_ENSINO_FUND MAIS_ENSINO_MED ENSINO_INTEG_FUND ENSINO_INTEG_MED
#1                1               1                 0                1
#2                0               0                 0                1
#3                1               1                 0                1

解释:我们首先将character列转换SIGLA为 a factor; 然后我们aggregate在所有列(除了PK_COD_ENTIDADE)中数据PK_COD_ENTIDADE,并返回max值(这应该与您的问题陈述一致)。

您可以使用dplyrsgroup_bysummarise_all

library(dplyr)
dftest2 %>%
    group_by(PK_COD_ENTIDADE) %>%
    summarise_all(~ifelse(is.character(.x), last(.x), max(.x))) %>%
    ungroup()    
# A tibble: 3 x 14
  PK_COD_ENTIDADE ANO_CENSO PK_COD_TURMA NU_DURACAO_TURMA FK_COD_ETAPA_EN…
            <dbl>     <dbl>        <dbl>            <dbl>            <dbl>
1              12      2011           41              255               41
2              13      2011           18              255               19
3              14      2011           16              255               19
# … with 9 more variables: FK_COD_ESTADO <dbl>, SIGLA <chr>,
#   FK_COD_MUNICIPIO <dbl>, ID_LOCALIZACAO <dbl>, ID_DEPENDENCIA_ADM <dbl>,
#   MAIS_ENSINO_FUND <dbl>, MAIS_ENSINO_MED <dbl>, ENSINO_INTEG_FUND <int>,
#   ENSINO_INTEG_MED <int>
于 2019-10-30T23:36:00.147 回答