首页 > 解决方案 > 如何向前重复观察?

问题描述

我想有条件地重复一个变量的值。例如,我有这个 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  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”。重要的细节是我对不同的“鳕鱼”有很多观察。我怎样才能轻松地进行这种转换?

标签: rdataframeconditionalrepeat

解决方案


使用的最佳时间filltidyverse.

首先,确保您的<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"))

推荐阅读