填充R数据框中缺少的行 [英] Fill in missing rows in R data frame
本文介绍了填充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中每个ID的最早年份。
- 构建一个从每个ID的最早年份到Model_Year的连续年份的新表(Table2)。
- 将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屋!
查看全文