R 如何用组内以前的非NaN值替换NaN值
我需要用组中以前的非NaN值替换NaN值 这是一个例子:R 如何用组内以前的非NaN值替换NaN值,r,dplyr,R,Dplyr,我需要用组中以前的非NaN值替换NaN值 这是一个例子: +-------+------------+-------+ | ts_id | date | value | +-------+------------+-------+ | 2 | 01/10/2014 | 18 | | 2 | 01/11/2014 | 15 | | 2 | 01/12/2014 | NaN | | 2 | 01/01/2015 | NaN | |
+-------+------------+-------+
| ts_id | date | value |
+-------+------------+-------+
| 2 | 01/10/2014 | 18 |
| 2 | 01/11/2014 | 15 |
| 2 | 01/12/2014 | NaN |
| 2 | 01/01/2015 | NaN |
| 2 | 01/02/2015 | NaN |
| 3 | 01/03/2015 | 19 |
| 3 | 01/04/2015 | 20 |
| 3 | 01/10/2015 | 12 |
| 3 | 01/11/2015 | 17 |
| 3 | 01/12/2015 | NaN |
| 3 | 01/01/2016 | NaN |
| 3 | 01/08/2016 | 7 |
| 3 | 01/09/2016 | NaN |
| 3 | 01/10/2016 | NaN |
| 3 | 01/11/2016 | NaN |
| 3 | 01/12/2016 | NaN |
| 3 | 01/01/2017 | NaN |
+-------+------------+-------+
数据:
提前感谢。您可以使用以下功能:
library(dplyr)
library(zoo) # for the na.locf function
data %>%
group_by(ts_id) %>% # group by id
mutate(value = na.locf(value,na.rm=F)) # na.locf fills with the last non-empty value
#head()
# # A tibble: 6 x 3
# # Groups: ts_id [2]
# ts_id date value
# <dbl> <date> <dbl>
# 1 2 2014-10-01 18
# 2 2 2014-11-01 15
# 3 2 2014-12-01 15
# 4 2 2015-01-01 15
# 5 2 2015-02-01 15
# 6 3 2015-03-01 19
库(dplyr)
图书馆(动物园)#用于na.locf功能
数据%>%
分组依据(ts_id)%>%#分组依据id
mutate(value=na.locf(value,na.rm=F))35; na.locf用最后一个非空值填充
#总目()
##tibble:6 x 3
##组:ts#u id[2]
#ts_id日期值
#
# 1 2 2014-10-01 18
# 2 2 2014-11-01 15
# 3 2 2014-12-01 15
# 4 2 2015-01-01 15
# 5 2 2015-02-01 15
# 6 3 2015-03-01 19
遵循与na.locf
相同的逻辑,但将其保留在“韵文”中,我们可以这样做
library(tidyverse)
data %>%
group_by(ts_id) %>%
mutate(value = replace(value, is.nan(value), NA)) %>%
fill(value)
我不知道
na.locf
也适用于NaN
。或者(将其全部保留在“韵文”中),然后library(tidyverse);数据%>%group_by(ts_id)%%>%mutate(value=replace(value,is.nan(value),NA))%%>%fill(value)
我认为您也应该将其添加为答案。仅供参考,我认为它仍然有效,因为在NA.locf
内部使用is.NA()
,这仍然为nan
提供了TRUE
,这是有意义的
library(dplyr)
library(zoo) # for the na.locf function
data %>%
group_by(ts_id) %>% # group by id
mutate(value = na.locf(value,na.rm=F)) # na.locf fills with the last non-empty value
#head()
# # A tibble: 6 x 3
# # Groups: ts_id [2]
# ts_id date value
# <dbl> <date> <dbl>
# 1 2 2014-10-01 18
# 2 2 2014-11-01 15
# 3 2 2014-12-01 15
# 4 2 2015-01-01 15
# 5 2 2015-02-01 15
# 6 3 2015-03-01 19
library(tidyverse)
data %>%
group_by(ts_id) %>%
mutate(value = replace(value, is.nan(value), NA)) %>%
fill(value)