按组添加缺少年份的行

时间:2017-11-10 11:34:37

标签: r dataframe

在R data.frame中,我会按组找到缺少的年份并添加一行 每个缺少的年份并重复最后一个值。

一个例子

这是data.frame

 1. GROUP/YEAR1/YEAR2/YEAR3
 2. A/100/190/na
 3. A/90/na/300
 4. B/200/70/na

我想要

1. GROUP/YEAR1/YEAR2/YEAR3
  2. A/100/190/190
  3. A/90/90/300
  4. B/200/70/70

2 个答案:

答案 0 :(得分:1)

您可以使用complete中的tidyr来完成序列,然后fill来填充每组的NAs,即

library(tidyverse)

df %>% 
 complete(YEAR, GROUP) %>% 
 group_by(GROUP) %>% 
 fill(VALUE)

给出,

# A tibble: 4 x 3
# Groups:   GROUP [2]
   YEAR  GROUP VALUE
  <int> <fctr> <int>
1  2000      A   190
2  2001      A   200
3  2000      B    70
4  2001      B    70

修改

根据您的新要求,您似乎只需要按行填充NAs。在这种情况下,一个简单的基础R解决方案可能是,

as.data.frame(t(apply(df, 1, function(i) zoo::na.locf(i))))

答案 1 :(得分:0)

另一种方法可能是merge使用expand.grid填充缺失的行,使用na.locf填充NA。

df <- merge(expand.grid(GROUP=unique(df$GROUP), YEAR=unique(df$YEAR)), df, all=T)
library(zoo)
df$VALUE <- zoo::na.locf(df$VALUE)
df

输出是:

  GROUP YEAR VALUE
1     A 2000   190
2     A 2001   200
3     B 2000    70
4     B 2001    70