根据R中先前和后续非NA值之间的公式结果填写NA

根据R中先前和后续非NA值之间的公式结果填写NA,r,dataframe,dplyr,tidyr,na,R,Dataframe,Dplyr,Tidyr,Na,我有以下数据帧: day <- c(1,2,3,4,5,6,7,8,9, 10, 11) totalItems <- c(700, NA, 32013, NA, NA, NA, 39599, NA, NA, NA, 107542) df <- data.frame(day, totalItems) day您可以基于NA值的存在在数据中创建组 library(dplyr) df1 <- df %>% mutate(group = cumsum(lag(!is.na

我有以下数据帧:

day <- c(1,2,3,4,5,6,7,8,9, 10, 11)
totalItems <- c(700, NA, 32013, NA, NA, NA, 39599, NA, NA, NA, 107542)
df <- data.frame(day, totalItems)

day您可以基于
NA
值的存在在数据中创建组

library(dplyr)

df1 <- df %>% mutate(group = cumsum(lag(!is.na(totalItems), default = TRUE)))
df1

#   day totalItems group
#1    1        700     1
#2    2         NA     2
#3    3      32013     2
#4    4         NA     3
#5    5         NA     3
#6    6         NA     3
#7    7      39599     3
#8    8         NA     4
#9    9         NA     4
#10  10         NA     4
#11  11     107542     4

非常感谢。它很好用。但是,我注意到,如果将
day
变量格式化为日期,则它不起作用。有没有解决这个问题的建议?在这种情况下,您可以通过执行刚刚从客户端收到数据集的
day
变量
day=day-first(day)+1
,将
day
变量转换为数字,这与我在此处共享的原始数据集有所不同。除了数十万行之外,它还有一个额外的
Country
列。我想我应该在你的代码中添加一个
groupby(Country)
。。。但到目前为止,我还没有找到正确的代码。很抱歉打扰你。。。我是个新手!感谢you@Sal是的,您需要添加
groupby(country)
以创建
group
df1%groupby(country)%%>%变异(group-…
。另外
df1%>%groupby(group,country)%%>%…
library(dplyr)

df1 <- df %>% mutate(group = cumsum(lag(!is.na(totalItems), default = TRUE)))
df1

#   day totalItems group
#1    1        700     1
#2    2         NA     2
#3    3      32013     2
#4    4         NA     3
#5    5         NA     3
#6    6         NA     3
#7    7      39599     3
#8    8         NA     4
#9    9         NA     4
#10  10         NA     4
#11  11     107542     4
df1 %>%
  group_by(group) %>%
  slice(n()) %>%
  ungroup %>%
  transmute(group, estimatedDaily = (totalItems - lag(totalItems, default = 0))/
                                    (day - lag(day, default = 0))) %>%
  left_join(df1, by = 'group') %>%
  select(-group)

#  estimatedDaily   day totalItems
#            <dbl> <dbl>      <dbl>
# 1           700      1        700
# 2         15656.     2         NA
# 3         15656.     3      32013
# 4          1896.     4         NA
# 5          1896.     5         NA
# 6          1896.     6         NA
# 7          1896.     7      39599
# 8         16986.     8         NA
# 9         16986.     9         NA
#10         16986.    10         NA
#11         16986.    11     107542