首页 > 解决方案 > 填充缺失值

问题描述

data=data.frame("student"=c(1,1,1,1,2,2,2,2,3,3,3,3,4),
                "timeHAVE"=c(1,4,7,10,2,5,NA,11,6,NA,NA,NA,3),
                "timeWANT"=c(1,4,7,10,2,5,8,11,6,9,12,15,3))

library(dplyr);library(tidyverse)
data$timeWANTattempt=data$timeHAVE
data <- data %>% 
  group_by(student) %>% 
  fill(timeWANTattempt)+3

我有“timeHAVE”,我想用上一次 +3 替换丢失的时间。我展示了我的 dplyr 尝试,但它不起作用。我寻求 data.table 解决方案。谢谢你。

标签: rdplyrdata.table

解决方案


你可以试试。

data %>% 
  group_by(student) %>%
  mutate(n_na = cumsum(is.na(timeHAVE))) %>% 
  mutate(timeHAVE = ifelse(is.na(timeHAVE), timeHAVE[n_na == 0 & lead(n_na) == 1] + 3*n_na, timeHAVE))
   student timeHAVE timeWANT  n_na
     <dbl>    <dbl>    <dbl> <int>
 1       1        1        1     0
 2       1        4        4     0
 3       1        7        7     0
 4       1       10       10     0
 5       2        2        2     0
 6       2        5        5     0
 7       2        8        8     1
 8       2       11       11     1
 9       3        6        6     0
10       3        9        9     1
11       3       12       12     2
12       3       15       15     3
13       4        3        3     0

我包括了连续n_na计数的小帮手。NA然后第二个 mutate 将 NA 的数量乘以 3,并将其添加到'sNA之前的第一个非元素NA


推荐阅读