在数据框中生成带有条件值的行

时间:2018-10-22 15:59:44

标签: r dplyr tidyr

我有一个数据集,其中包含2010年至2013年的信息。但是,当给定年份没有信息时,与其使用NA行,不存在该行。

datos <- data.frame(Country = c(rep("Australia", 3), rep("Belgium", 3)), 
     Year = c(2010, 2011, 2013, 2010, 2011, 2013), 
     Value = c(0.34, 0.35, 0.25, 0.30, 0.34, 0.38))

我得到了什么

  Country   Year  Value
1 Australia 2010   0.34
2 Australia 2011   0.35
3 Australia 2013   0.25
4   Belgium 2010   0.30
5   Belgium 2011   0.34
6   Belgium 2013   0.38

我想要的是:在每个Country上为缺少的年份创建行,并估算Value,使之为上一年的年份。

   Country   Year  Value
1 Australia 2010   0.34
2 Australia 2011   0.35
3 Australia 2012   0.35   #New row
4 Australia 2013   0.25
5   Belgium 2010   0.30
6   Belgium 2011   0.34
7   Belgium 2012   0.34   #New row
8   Belgium 2013   0.38

2 个答案:

答案 0 :(得分:4)

这是complete

的一个选项
library(tidyverse)
complete(datos, Country, Year = min(Year):max(Year)) %>% 
        fill(Value)

答案 1 :(得分:1)

感谢@akrun的回答。但是,这对我的数据集无效,因为它太大了,fill()扩展了数据集重复的Country-Years组合,这对我来说没有意义。我在Google搜索中从软件包na.locf()中遇到了zoo,该软件包只是使用上一个或上一个观察值来填充缺失值。

library(tidyverse)
library(zoo)

complete(datos, Year = 2003:2016) %>%
na.locf()