我喜欢用tidyverse
逻辑在分组的paneldata中插补变量,故事是这样的:这是调查数据,人们在特定的年份(时间)被问及过去几年的行为。因此,我假设当有人说"我有一辆车5年了"时,那些年的汽车变量可以设置为1。那些年没有问这个问题。这是最小的数据和我喜欢实现的插补。
paneldata = data.frame(id=c(rep(1,10),rep(2,10)),
time=seq(1:10),
car=c(1,NA,NA,NA,NA,0,NA,NA,NA,1,1,NA,NA,NA,1,NA,NA,NA,NA,1),
car_imp_goal=c(1,NA,NA,NA,NA,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1))
paneldata
以下是我尝试的方法
paneldata <- paneldata %>% mutate(car_imp_trial = car)
paneldata %>% group_by(id) %>% fill(car_imp_trial , .direction = "up")
# A tibble: 20 × 5
# Groups: id [2]
id time car car_imp_goal car_imp_trial
<dbl> <int> <dbl> <dbl> <dbl>
1 1 1 1 1 1
2 1 2 NA NA 0
3 1 3 NA NA 0
4 1 4 NA NA 0
5 1 5 NA NA 0
6 1 6 0 0 0
7 1 7 NA 1 1
8 1 8 NA 1 1
9 1 9 NA 1 1
10 1 10 1 1 1
11 2 1 1 1 1
12 2 2 NA 1 1
13 2 3 NA 1 1
14 2 4 NA 1 1
15 2 5 1 1 1
16 2 6 NA 1 1
17 2 7 NA 1 1
18 2 8 NA 1 1
19 2 9 NA 1 1
20 2 10 1 1 1
过去的行为问题只在特定的年份问(例如时间5和10)。我需要group_by(id)
然后使用ifelse
条件选择相关的时间,即5或10然后考虑使用fill
。car_imp_trial
的问题是它从第6年填充了0,这不是粘贴的行为问题。
1条答案
按热度按时间fkaflof61#
创建一个时间间隔id,然后向上填充汽车列