在R中按条件插补分组数据中的值

0yg35tkg  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(109)

我喜欢用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然后考虑使用fillcar_imp_trial的问题是它从第6年填充了0,这不是粘贴的行为问题。

fkaflof6

fkaflof61#

创建一个时间间隔id,然后向上填充汽车列

paneldata%>%
   group_by(id,id2 = cut_interval(time, length = 5,labels =FALSE))%>%
   fill(car, .direction = 'up')

# A tibble: 20 × 5
# Groups:   id, id2 [4]
      id  time   car car_imp   id2
   <dbl> <int> <dbl>   <dbl> <int>
 1     1     1     1       1     1
 2     1     2    NA      NA     1
 3     1     3    NA      NA     1
 4     1     4    NA      NA     1
 5     1     5    NA      NA     1
 6     1     6     0       0     2
 7     1     7     1       1     2
 8     1     8     1       1     2
 9     1     9     1       1     2
10     1    10     1       1     2
11     2     1     1       1     1
12     2     2     1       1     1
13     2     3     1       1     1
14     2     4     1       1     1
15     2     5     1       1     1
16     2     6     1       1     2
17     2     7     1       1     2
18     2     8     1       1     2
19     2     9     1       1     2
20     2    10     1       1     2

相关问题