我想通过使用 ID 和年龄的每个唯一组合的第一个观察值 (x1=9.4, 11.5, 12.1) 添加接下来几年的 1.5% 增长来计算变量“x1”的缺失值。请参阅以下示例:
#Create data frame
data<- data.frame(ID = c(1,1,1,2,2,2,3,3,3), Age= c(20,21,22,20,21,22,20,21,22), x1= c(9.4,NA, NA, 11.5, NA, NA, 12.1, NA, NA))
我尝试使用 dplyr 来改变缺失的 NA,但没有成功:
df = data %>% group_by(ID, Age) %>% mutate(x1=ifelse(is.na(x1), lag(x1)+ (lag(x1)*0.015), x1))
我也尝试过在嵌套循环中处理它,但不知道当年龄增加一年时如何引用以前丢失的变量作为下一个函数的输入:
i<- 1
for(i in 1:length(unique(data$ID))){
j<-1
for(j in 1:length(unique(data$Age))) {
print(x1<- lag(data$x1)+ (lag(data$x1) * 0.015))
j<- j+1
}
}
这就是我生成的数据集应该是什么样的:
data<- data.frame(ID = c(1,1,1,2,2,2,3,3,3), Age= c(20,21,22,20,21,22,20,21,22), x1= c(9.4,9.54, 9.68, 11.5, 11.67, 11.84, 12.1, 12.28, 12.46))
在基础 R 中:
transform(data, x1 = ave(x1, ID, FUN = \(x)x[1]*1.015^(seq_along(x)-1)))
ID Age x1
1 1 20 9.400000
2 1 21 9.541000
3 1 22 9.684115
4 2 20 11.500000
5 2 21 11.672500
6 2 22 11.847587
7 3 20 12.100000
8 3 21 12.281500
9 3 22 12.465722
data %>%
mutate(x1 = first(x1)*1.015^(row_number() - 1), .by = ID)
ID Age x1
1 1 20 9.400000
2 1 21 9.541000
3 1 22 9.684115
4 2 20 11.500000
5 2 21 11.672500
6 2 22 11.847587
7 3 20 12.100000
8 3 21 12.281500
9 3 22 12.465722