R 将具有相同值的行与保留多个Dummy的条件合并

R 将具有相同值的行与保留多个Dummy的条件合并,r,R,创建DF的子集示例(实际DF的一部分代码在末尾) 我想将PK_COD_ENTIDADE具有相同值的行合并为一个行,并将具有相同PK_COD_ENTIDADE的假人的值保留为“1”。我不在乎PK_COD_TURMA中的不同值,不管哪个值保持在最终DF(27或41)。 我的DF有多个变量,比如PK_COD_TURMA,我不关心最终值,重要的是PK_COD_实体和值为“1”的假人 最后看起来是这样的: ANO_CENSO PK_COD_TURMA PK_COD_ENTIDADE MAIS_ENS

创建DF的子集示例(实际DF的一部分代码在末尾)

我想将PK_COD_ENTIDADE具有相同值的行合并为一个行,并将具有相同PK_COD_ENTIDADE的假人的值保留为“1”。我不在乎PK_COD_TURMA中的不同值,不管哪个值保持在最终DF(27或41)。 我的DF有多个变量,比如PK_COD_TURMA,我不关心最终值,重要的是PK_COD_实体和值为“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时,得到两个假人的值“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"))

dftest2您为
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
说明:我们首先将
字符
SIGLA
转换为
因子
;然后通过
PK\u COD\u ENTIDADE
聚合所有列中的数据(除了
PK\u COD\u ENTIDADE
),并返回
max
值(该值应与您的问题陈述一致)

您可以使用
dplyr
s
group\u by
summary\u 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>
库(dplyr)
dftest2%>%
分组依据(PK\U COD\U实体)%>%
总结所有(~ifelse(is.character(.x)、last(.x)、max(.x)))%>%
解组()
#一个tibble:3x14
这是一个很好的例子,它是一个很好的例子…
1              12      2011           41              255               41
2              13      2011           18              255               19
3              14      2011           16              255               19
#…还有9个变量:FK_COD_ESTADO,SIGLA,
#FK_COD_市政,ID_LOCALIZACAO,ID_DEPENDENCIA_ADM,
#MAIS_ENSINO_基金、MAIS_ENSINO_医学、ENSINO_整合基金、,
#恩西诺医学院

非常感谢!事实上,我添加了该示例的子集,因为我无法将其正确粘贴到这里。如此简单的代码,您在这里真的帮助了我,谢谢!!
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>