以下是示例数据帧:

df1 <- read.table(text = "DT   odczyt.1
'2023-08-16 06:57:15'   482.307
'2023-08-16 06:57:30'   482.307
'2023-08-16 06:57:45'   482.311
'2023-08-16 06:58:00'   NA
'2023-08-16 06:58:15'   NA
'2023-08-16 06:58:30'   482.315
'2023-08-16 06:58:45'   482.315
'2023-08-16 06:59:00'   482.318
'2023-08-16 06:59:15'   482.324
'2023-08-16 06:59:30'   NA
'2023-08-16 06:59:45'   NA
'2023-08-16 07:00:00'   NA
'2023-08-16 07:00:15'   NA
'2023-08-16 07:00:30'   NA
'2023-08-16 07:00:45'   NA", header = TRUE)

我想要完成数据,但仅当NA出现在最多三个连续行时.当有更多丢失的数据时,NA仍然存在.

tidyr::fill连续运行.为一个组添加一个条件似乎也不合理(我发现了这样一个例子Fill NA with condition based on the same column).

此外,该列中的最后一个值可以是NA.

我也考虑了na.approx,而不是fill.na.approx更好,但我不知道这是否可能,因为最后一行的NA

预期结果

df1 <- read.table(text = "DT   odczyt.1
'2023-08-16 06:57:15'   482.307
'2023-08-16 06:57:30'   482.307
'2023-08-16 06:57:45'   482.311
'2023-08-16 06:58:00'   482.311
'2023-08-16 06:58:15'   482.311
'2023-08-16 06:58:30'   482.315
'2023-08-16 06:58:45'   482.315
'2023-08-16 06:59:00'   482.318
'2023-08-16 06:59:15'   482.324
'2023-08-16 06:59:30'   NA
'2023-08-16 06:59:45'   NA
'2023-08-16 07:00:00'   NA
'2023-08-16 07:00:15'   NA
'2023-08-16 07:00:30'   NA
'2023-08-16 07:00:45'   NA", header = TRUE)

推荐答案

一种先做fill,然后有条件地过滤ifelse的方法

library(dplyr)
library(tidyr)

df1 %>% 
  mutate(new = odczyt.1) %>% 
  fill(new) %>% 
  mutate(grp = consecutive_id(odczyt.1)) %>% 
  mutate(odczyt.1 = ifelse(sum(is.na(odczyt.1)) <= 3 & is.na(odczyt.1), 
                      new, odczyt.1), .by = grp) %>% 
 select(-c(new, grp))
                    DT odczyt.1
1  2023-08-16 06:57:15  482.307
2  2023-08-16 06:57:30  482.307
3  2023-08-16 06:57:45  482.311
4  2023-08-16 06:58:00  482.311
5  2023-08-16 06:58:15  482.311
6  2023-08-16 06:58:30  482.315
7  2023-08-16 06:58:45  482.315
8  2023-08-16 06:59:00  482.318
9  2023-08-16 06:59:15  482.324
10 2023-08-16 06:59:30       NA
11 2023-08-16 06:59:45       NA
12 2023-08-16 07:00:00       NA
13 2023-08-16 07:00:15       NA
14 2023-08-16 07:00:30       NA
15 2023-08-16 07:00:45       NA

R相关问答推荐

在嵌套gt表中,如何行feed|更改连字符类型

最优收敛

具有相同条宽 * 和 ** 在 * 多个 * 图上相同条距的条图

如何替换某个字符的所有出现,但如果该字符是字符串中的第一个,则不替换?

使用Shiny组合和显示复制和粘贴的数据

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

创建重复删除的唯一数据集组合列表

以R为基数排列奇数个图

根据列表中项目的名称多次合并数据框和列表

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

提取一个列表中单个列的重复观察结果R

展开对数比例绘图的轴(添加填充)

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

根据另一列中的值和条件查找新列的值

解析嵌套程度极高的地理数据

使用ifElse语句在ggploy中设置aes y值

基于R中的辅助向量中的值有条件地连接向量中的字符串

如何判断代码是否在R Markdown(RMD)上下文中交互运行?