如何基于r中的条件创建从0到3的变量?

时间:2018-09-03 01:55:40

标签: r dataframe conditional

我有一张这样的桌子:

      cod  ano             MUNICIPIO Programa
1  110001 1998 ALTA FLORESTA D OESTE         
2  110001 1999 ALTA FLORESTA D OESTE         
3  110001 2000 ALTA FLORESTA D OESTE         
4  110001 2001 ALTA FLORESTA D OESTE         
5  110001 2002 ALTA FLORESTA D OESTE     PMAT        
6  110001 2003 ALTA FLORESTA D'OESTE         
7  110001 2004 ALTA FLORESTA D OESTE         
8  110001 2005 ALTA FLORESTA D OESTE         
9  110001 2006 ALTA FLORESTA D OESTE     PMAT    
10 110001 2007 ALTA FLORESTA D OESTE         
11 110001 2008 ALTA FLORESTA D OESTE         
12 110001 2009 ALTA FLORESTA D OESTE         
13 110001 2010 ALTA FLORESTA D OESTE     PMAT    
14 110001 2011 ALTA FLORESTA D OESTE         
15 110001 2012 ALTA FLORESTA D OESTE         
16 110001 2013 ALTA FLORESTA D OESTE         
17 110001 2014 ALTA FLORESTA D OESTE         
18 110001 2015 ALTA FLORESTA D OESTE         
19 110001 2016 ALTA FLORESTA D OESTE         
20 110002 1998             ARIQUEMES         
21 110002 1999             ARIQUEMES         
22 110002 2000             ARIQUEMES         
23 110002 2001             ARIQUEMES         
24 110002 2002             ARIQUEMES         
25 110002 2003             ARIQUEMES         
26 110002 2004             ARIQUEMES     PMAT
27 110002 2005             ARIQUEMES         
28 110002 2006             ARIQUEMES         
29 110002 2007             ARIQUEMES         
30 110002 2008             ARIQUEMES         
31 110002 2009             ARIQUEMES         
32 110002 2010             ARIQUEMES         
33 110002 2011             ARIQUEMES         
34 110002 2012             ARIQUEMES         
35 110002 2013             ARIQUEMES         
36 110002 2014                               
37 110002 2015             ARIQUEMES         
38 110002 2016             ARIQUEMES         
39 110003 1998                CABIXI         
40 110003 1999                CABIXI         
41 110003 2000                CABIXI         
42 110003 2001                CABIXI         
43 110003 2002                CABIXI         
44 110003 2003                CABIXI         
45 110003 2004                CABIXI         
46 110003 2005                CABIXI         
47 110003 2006                CABIXI         
48 110003 2007                CABIXI         
49 110003 2008                CABIXI         
50 110003 2009                CABIXI  

其中变量“ Programa”是“ PMAT”或“”。我要为每个城市创建一个新变量,如虚拟变量(我称为pmat_123),但每次城市具有“ PMAT”时,其变量将在0到3之间变化。像这样:

      cod  ano             MUNICIPIO Programa pmat_123
1  110001 1998 ALTA FLORESTA D OESTE                 0
2  110001 1999 ALTA FLORESTA D OESTE                 0
3  110001 2000 ALTA FLORESTA D OESTE                 0 
4  110001 2001 ALTA FLORESTA D OESTE                 0
5  110001 2002 ALTA FLORESTA D OESTE     PMAT        1 
6  110001 2003 ALTA FLORESTA D'OESTE                 1
7  110001 2004 ALTA FLORESTA D OESTE                 1
8  110001 2005 ALTA FLORESTA D OESTE                 1
9  110001 2006 ALTA FLORESTA D OESTE     PMAT        2
10 110001 2007 ALTA FLORESTA D OESTE                 2
11 110001 2008 ALTA FLORESTA D OESTE                 2
12 110001 2009 ALTA FLORESTA D OESTE                 2
13 110001 2010 ALTA FLORESTA D OESTE     PMAT        3
14 110001 2011 ALTA FLORESTA D OESTE                 3
15 110001 2012 ALTA FLORESTA D OESTE                 3
16 110001 2013 ALTA FLORESTA D OESTE                 3
17 110001 2014 ALTA FLORESTA D OESTE                 3
18 110001 2015 ALTA FLORESTA D OESTE                 3
19 110001 2016 ALTA FLORESTA D OESTE                 3 
20 110002 1998             ARIQUEMES                 0
21 110002 1999             ARIQUEMES                 0
22 110002 2000             ARIQUEMES                 0
23 110002 2001             ARIQUEMES                 0
24 110002 2002             ARIQUEMES                 0
25 110002 2003             ARIQUEMES                 0
26 110002 2004             ARIQUEMES     PMAT        1
27 110002 2005             ARIQUEMES                 1
28 110002 2006             ARIQUEMES                 1
29 110002 2007             ARIQUEMES                 1
30 110002 2008             ARIQUEMES                 1
31 110002 2009             ARIQUEMES                 1
32 110002 2010             ARIQUEMES                 1
33 110002 2011             ARIQUEMES                 1
34 110002 2012             ARIQUEMES                 1
35 110002 2013             ARIQUEMES                 1
36 110002 2014                                       1
37 110002 2015             ARIQUEMES                 1
38 110002 2016             ARIQUEMES                 1 
39 110003 1998                CABIXI                 0 
40 110003 1999                CABIXI                 0
41 110003 2000                CABIXI                 0
42 110003 2001                CABIXI                 0
43 110003 2002                CABIXI                 0 
44 110003 2003                CABIXI                 0

我尝试使用mutate函数和ifelse,但是没有用。 你们可以帮我吗?

1 个答案:

答案 0 :(得分:0)

按“ cod”分组后,通过取逻辑表达式的累加和来创建“ pmat_123”

library(dplyr)
df1 %>%
   group_by(cod) %>%
   mutate(pmat_123  = cumsum(Programa == 'PMAT'))
# A tibble: 34 x 5
# Groups:   cod [2]
#      cod   ano MUNICIPIO             Programa pmat_123
#    <int> <int> <chr>                 <chr>       <int>
# 1 110001  1998 ALTA FLORESTA D OESTE ""              0
# 2 110001  1999 ALTA FLORESTA D OESTE ""              0
# 3 110001  2000 ALTA FLORESTA D OESTE ""              0
# 4 110001  2001 ALTA FLORESTA D OESTE ""              0
# 5 110001  2002 ALTA FLORESTA D OESTE PMAT            1
# 6 110001  2003 ALTA FLORESTA D OESTE ""              1
# 7 110001  2004 ALTA FLORESTA D OESTE ""              1
# 8 110001  2005 ALTA FLORESTA D OESTE ""              1
# 9 110001  2006 ALTA FLORESTA D OESTE PMAT            2
#10 110001  2007 ALTA FLORESTA D OESTE ""              2
# ... with 24 more rows

数据

df1 <- structure(list(cod = c(110001L, 110001L, 110001L, 110001L, 110001L, 
110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 
110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 
110002L, 110002L, 110002L, 110002L, 110002L, 110002L, 110002L, 
110002L, 110002L, 110002L, 110002L, 110002L, 110002L, 110002L, 
110002L), ano = c(1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 
2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 
2014L, 2015L, 2016L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L
), MUNICIPIO = c("ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", 
"ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", 
"ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", 
"ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", 
"ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", 
"ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", 
"ALTA FLORESTA D OESTE", "ALTA FLORESTA D OESTE", "ARIQUEMES", 
"ARIQUEMES", "ARIQUEMES", "ARIQUEMES", "ARIQUEMES", "ARIQUEMES", 
"ARIQUEMES", "ARIQUEMES", "ARIQUEMES", "ARIQUEMES", "ARIQUEMES", 
"ARIQUEMES", "ARIQUEMES", "ARIQUEMES", "ARIQUEMES"), Programa = c("", 
"", "", "", "PMAT", "", "", "", "PMAT", "", "", "", "PMAT", "", 
"", "", "", "", "", "", "", "", "", "", "", "PMAT", "", "", "", 
"", "", "", "", "")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34"))