填充R数据框中缺少的行 [英] Fill in missing rows in R data frame

查看:11
本文介绍了填充R数据框中缺少的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经将一些原始数据导入到R中,如下所示:

表1:

ID    Year    Value
01    1999       25
01    2000       12
01    2002       14
02    1998       16
02    2003        0
02    2004       14

该表按ID和年份排序,但如您所见,某些年份丢失了。我从数据的来源知道,这些失踪年份的价值应该是零。我还有另一个名为Model_Year的变量,并设置为2015年。我想要填补空白,直到并包括Model_Year。

我认为我应该采取的步骤是:

  1. 选择表1中每个ID的最早年份。
  2. 构建一个从每个ID的最早年份到Model_Year的连续年份的新表(Table2)。
  3. 将Table1联接到Table2以将值添加回表中,并将任何NA值替换为零。

我想我可以完成第1步和第3步,但我还不知道如何完成第2步--生成表2。

如果您认为我的方法不是最优的,我将非常感谢您的任何帮助,或者建议替代方法。

谢谢

推荐答案

我认为tidyr::expand()会很有用。以下是tidyverse解决方案:

library(tidyverse)
# how to build table2
table2 <- table1 %>% group_by(ID) %>% mutate(Earliest.Year = min(Year)) %>%
        select(-Value, -Year) %>% distinct() %>%
        expand(Year = Earliest.Year:2015, Earliest.Year) %>%
        select(-Earliest.Year)

# a direct piepe solution
table1 %>% group_by(ID) %>% mutate(Earliest.Year = min(Year)) %>%
        select(-Value, -Year) %>% distinct() %>%
        expand(Year = Earliest.Year:2015, Earliest.Year) %>%
        select(-Earliest.Year) %>%
        left_join(table1, by = c("ID", "Year")) %>%
        replace(is.na(.), 0)
# output
# A tibble: 35 x 3
# Groups:   ID [?]
      ID  Year Value
   <int> <int> <dbl>
 1     1  1999    25
 2     1  2000    12
 3     1  2001     0
 4     1  2002    14
 5     1  2003     0
 6     1  2004     0
 7     1  2005     0
 8     1  2006     0
 9     1  2007     0
10     1  2008     0
# ... with 25 more rows

这篇关于填充R数据框中缺少的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆