根据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