如何向前重复观察?
How to repeat observations forward?
我想有条件地重复一个变量的值。
例如,我有这个 data.frame
cod ano partido_prefeito
1 110001 1998 <NA>
2 110001 1999 <NA>
3 110001 2000 <NA>
4 110001 2001 PPB
5 110001 2002 <NA>
6 110001 2003 <NA>
7 110001 2004 <NA>
8 110001 2005 PDT
9 110001 2006 <NA>
10 110001 2007 <NA>
11 110001 2008 <NA>
12 110001 2009 PTN
13 110001 2010 <NA>
14 110001 2011 <NA>
15 110001 2012 <NA>
16 110001 2013 PMDB
17 110001 2014 <NA>
18 110001 2015 <NA>
19 110001 2016 <NA>
20 110002 1998 <NA>
对于变量 "partido_prefeito" 我有很多 "NA" 观察,但是,我想在接下来的 3 年中重复观察,直到观察发生变化,对于每个 "cod".变成那样:
cod ano partido_prefeito
1 110001 1998 <NA>
2 110001 1999 <NA>
3 110001 2000 <NA>
4 110001 2001 PPB
5 110001 2002 PBP
6 110001 2003 PBP
7 110001 2004 PBP
8 110001 2005 PDT
9 110001 2006 PDT
10 110001 2007 PDT
11 110001 2008 PDT
12 110001 2009 PTN
13 110001 2010 PTN
14 110001 2011 PTN
15 110001 2012 PTN
16 110001 2013 PMDB
17 110001 2014 PMDB
18 110001 2015 PMBD
19 110001 2016 PMBD
20 110002 1998 <NA>
前3年:1998年、1999年、2000年,数据仍为"NA"。重要的细节是我有很多不同 "cod" 的观察结果。
我怎样才能轻松完成这种转换?
使用 tidyverse
的 fill
的完美时机。
首先,确保您的 <NA>
值是实际的 NA 而不是字符串。那么:
library(tidyverse)
data %>% group_by(cod) %>% fill(partido_prefeito)
fill
取最后一个值并向下填充。唯一的要求是你的数据中必须有实际的 NA
值。如果 NA
存储为字符串,即 "<NA>"
您需要先将其转换为 <NA>
。
1 110001 1998 <NA>
2 110001 1999 <NA>
3 110001 2000 <NA>
4 110001 2001 PPB
5 110001 2002 PPB
6 110001 2003 PPB
7 110001 2004 PPB
8 110001 2005 PDT
9 110001 2006 PDT
10 110001 2007 PDT
11 110001 2008 PDT
12 110001 2009 PTN
13 110001 2010 PTN
14 110001 2011 PTN
15 110001 2012 PTN
16 110001 2013 PMDB
17 110001 2014 PMDB
18 110001 2015 PMDB
19 110001 2016 PMDB
20 110002 1998 <NA>
数据:
data <- structure(list(cod = c(110001L, 110001L, 110001L, 110001L, 110001L,
110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 110001L,
110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 110001L,
110002L), ano = c(1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L,
2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L,
2014L, 2015L, 2016L, 1998L), partido_prefeito = structure(c(NA,
NA, NA, 3L, NA, NA, NA, 1L, NA, NA, NA, 4L, NA, NA, NA, 2L, NA,
NA, NA, NA), .Label = c("PDT", "PMDB", "PPB", "PTN"), class = "factor")), 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"))
我想有条件地重复一个变量的值。 例如,我有这个 data.frame
cod ano partido_prefeito
1 110001 1998 <NA>
2 110001 1999 <NA>
3 110001 2000 <NA>
4 110001 2001 PPB
5 110001 2002 <NA>
6 110001 2003 <NA>
7 110001 2004 <NA>
8 110001 2005 PDT
9 110001 2006 <NA>
10 110001 2007 <NA>
11 110001 2008 <NA>
12 110001 2009 PTN
13 110001 2010 <NA>
14 110001 2011 <NA>
15 110001 2012 <NA>
16 110001 2013 PMDB
17 110001 2014 <NA>
18 110001 2015 <NA>
19 110001 2016 <NA>
20 110002 1998 <NA>
对于变量 "partido_prefeito" 我有很多 "NA" 观察,但是,我想在接下来的 3 年中重复观察,直到观察发生变化,对于每个 "cod".变成那样:
cod ano partido_prefeito
1 110001 1998 <NA>
2 110001 1999 <NA>
3 110001 2000 <NA>
4 110001 2001 PPB
5 110001 2002 PBP
6 110001 2003 PBP
7 110001 2004 PBP
8 110001 2005 PDT
9 110001 2006 PDT
10 110001 2007 PDT
11 110001 2008 PDT
12 110001 2009 PTN
13 110001 2010 PTN
14 110001 2011 PTN
15 110001 2012 PTN
16 110001 2013 PMDB
17 110001 2014 PMDB
18 110001 2015 PMBD
19 110001 2016 PMBD
20 110002 1998 <NA>
前3年:1998年、1999年、2000年,数据仍为"NA"。重要的细节是我有很多不同 "cod" 的观察结果。 我怎样才能轻松完成这种转换?
使用 tidyverse
的 fill
的完美时机。
首先,确保您的 <NA>
值是实际的 NA 而不是字符串。那么:
library(tidyverse)
data %>% group_by(cod) %>% fill(partido_prefeito)
fill
取最后一个值并向下填充。唯一的要求是你的数据中必须有实际的 NA
值。如果 NA
存储为字符串,即 "<NA>"
您需要先将其转换为 <NA>
。
1 110001 1998 <NA>
2 110001 1999 <NA>
3 110001 2000 <NA>
4 110001 2001 PPB
5 110001 2002 PPB
6 110001 2003 PPB
7 110001 2004 PPB
8 110001 2005 PDT
9 110001 2006 PDT
10 110001 2007 PDT
11 110001 2008 PDT
12 110001 2009 PTN
13 110001 2010 PTN
14 110001 2011 PTN
15 110001 2012 PTN
16 110001 2013 PMDB
17 110001 2014 PMDB
18 110001 2015 PMDB
19 110001 2016 PMDB
20 110002 1998 <NA>
数据:
data <- structure(list(cod = c(110001L, 110001L, 110001L, 110001L, 110001L,
110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 110001L,
110001L, 110001L, 110001L, 110001L, 110001L, 110001L, 110001L,
110002L), ano = c(1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L,
2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L,
2014L, 2015L, 2016L, 1998L), partido_prefeito = structure(c(NA,
NA, NA, 3L, NA, NA, NA, 1L, NA, NA, NA, 4L, NA, NA, NA, 2L, NA,
NA, NA, NA), .Label = c("PDT", "PMDB", "PPB", "PTN"), class = "factor")), 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"))