通过操纵领先价值填补资产净值

时间:2019-04-02 08:04:40

标签: r dplyr

让我们假设我的数据看起来像以下摘录的前两列(有更多观察结果)。

ID  Value Value_Filled
762 2     2
762 2     2
763 NA    7
763 8     8
763 9     9

我想做的是使用dplyr填充每个ID组的所有NA值,其前导值减去1(例如在名为Value_Filled的列中)。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我们可以使用mutate_at,包括列以签入vars参数,并用值NA减去1替换每一列中的lead

library(dplyr)

df %>%
  group_by(ID) %>% #Maybe you need this, doesn't change anything for this example
  mutate_at(vars(Value, Value_Filled), ~ ifelse(is.na(.), lead(.) - 1, .))

#  ID Value Value_Filled
#1 762     2            2
#2 762     2            2
#3 763     7            7
#4 763     8            8
#5 763     9            9

答案 1 :(得分:0)

您可以mutate带有ifelse声明的新列来检查NA值:

library(dplyr)

df <- structure(list(ID = c(762L, 762L, 763L, 763L, 763L), Value = c(2L, 
2L, NA, 8L, 9L)), class = "data.frame", row.names = c(NA, -5L
))

df_filled <- df %>% mutate(value_filled = ifelse(is.na(.$Value),as.integer(substr(as.character(.$ID),1,1)),.$Value))