r - 如何向前重复观察?
问题描述
我想有条件地重复一个变量的值。例如,我有这个 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”。重要的细节是我对不同的“鳕鱼”有很多观察。我怎样才能轻松地进行这种转换?
解决方案
使用的最佳时间fill
从tidyverse
.
首先,确保您的<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"))
推荐阅读
- docker - 为什么 WSL2 连接 mysql 为 127.0.0.1 工作但 localhost 不起作用?
- api - 获取印度股票持有模式的 Web 服务
- javascript - 如何从具有相同 onchange 功能的多个 TextArea 材质 ui 中获取标签和值?
- html - 如何通过垂直居中保持第一行中的 3 个固定宽度项目和下一行中的 2 个固定宽度项目
- javascript - 单击折叠按钮后,我想添加顶部 + 100,第二次单击应该是顶部 - 100
- c++ - 哪个在 C++ 中获取给定字符串的子字符串更快?字符串构造函数还是 substr() 函数?
- python - 从.txt文件python读取列表
- java - 使用Java基于迭代从字符串数组中查找日期
- python - SciKit-Learn GridSearchCV 的 n_jobs 参数不适用于 Keras
- php - 将带有图像的数据插入数据库