R 如何删除2个以上的连续NA';在一个专栏里?

R 如何删除2个以上的连续NA';在一个专栏里?,r,datetime,duplicates,missing-data,R,Datetime,Duplicates,Missing Data,我不熟悉R,在我的数据帧中有col1(“时间戳”),col2(“值”)。我必须删除col2中超过2个连续NA的行。我的数据框看起来像下面的一个 Timestamp | values -----------|-------- 2011-01-02 | 2 2011-01-03 | 3 2011-01-04 | NA 2011-01-05 | 1 2011-01-06 | NA 2011-01-07 | NA 2011-01-08 | 8 2011

我不熟悉R,在我的数据帧中有col1(“时间戳”),col2(“值”)。我必须删除col2中超过2个连续NA的行。我的数据框看起来像下面的一个

Timestamp  | values  
-----------|--------
2011-01-02 |  2  
2011-01-03 |  3  
2011-01-04 |  NA  
2011-01-05 |  1  
2011-01-06 |  NA  
2011-01-07 |  NA    
2011-01-08 |  8  
2011-01-09 |  6  
2011-01-10 |  NA  
2011-01-11 |  NA  
2011-01-12 |  NA  
2011-01-13 |  2  
我想根据第二列删除2个以上重复的行。预期产出-

Timestamp  | values  
-----------|--------
2011-01-02 |  2  
2011-01-03 |  3  
2011-01-04 |  NA  
2011-01-05 |  1  
2011-01-06 |  NA  
2011-01-07 |  NA    
2011-01-08 |  8  
2011-01-09 |  6 
2011-01-13 |  2  

我正在寻找解决方案,提前谢谢。

您可以使用游程编码功能
rle
。我假设数据已经按日期排序

r <- rle(is.na(df$values))                      # check runs of NA in value column
df[!rep(r$values & r$lengths > 2, r$lengths),]  # remove runs of >2 length
r2,r$length),]#删除长度大于2的运行

您可以使用以下一行代码:

Df[!duplicated(Df$column),]

这里是另一个使用
data.table
中的
rleid
的选项。将“data.frame”转换为“data.table”(
setDT(df1)
),按“values”的运行长度id分组,我们得到行索引(
.I
),其中行数大于2(
.N>2
)并且(
&
所有的“value”都是“NA”。提取索引(
$V1
)以子集原始数据集的行

library(data.table)
setDT(df1)[df1[, .I[!(.N >2 & all(is.na(values)))], rleid(is.na(values))]$V1]
#    Timestamp values
#1: 2011-01-02      2
#2: 2011-01-03      3
#3: 2011-01-04     NA
#4: 2011-01-05      1
#5: 2011-01-06     NA
#6: 2011-01-07     NA
#7: 2011-01-08      8
#8: 2011-01-09      6
#9: 2011-01-13      2

日期重要吗?(他们必须是连续的吗?)是的,他们是连续的,但删除日期不是问题。谢谢你,这让我的工作变得简单。哦,如果日期超过两个,你想删除吗!好啊