提问人:Marco 提问时间:2/28/2023 最后编辑:Marco 更新时间:2/28/2023 访问量:27
在 R 中按条件插补分组数据中的值
Impute values in grouped data by condition in R
问:
我喜欢用逻辑插补分组面板数据中的变量。故事是这样的:它是调查数据,人们被要求在特定年份(时间)了解过去几年的行为。因此,我假设当有人说“我有一辆车 5 年”时,这些年的汽车变量可以设置为 1。在那些年里没有问过这个问题。这是最小的数据,也是我喜欢实现的插补。tidyverse
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)被问到。然后我需要使用条件来选择相关时间,即 5 或 10 然后正在考虑使用 .问题在于,它从 6 年级开始就填满了 0,这不是一个粘贴的行为问题。group_by(id)
ifelse
fill
car_imp_trial
答:
1赞
Onyambu
2/28/2023
#1
创建时间间隔 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
评论
car_imp