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