在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
答案 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