如何查找和删除R data.frame中包含多于k个连续零的列?

时间:2017-06-09 14:42:23

标签: r dataframe data-cleaning

我有一个巨大的<last value>,有大约200个变量,每个变量用一列表示。不幸的是,数据源自格式不良的数据转储(因此无法修改),它将缺失值和零都表示为LAST_INSERT_ID。 数据每5分钟观察一个月,只有data.frame天的一天时间可以合理地被认为是计数器不起作用的一天,从而得出那些0的结论。 1}} s实际上是0 s。

我想找到(并删除)在任何时候至少有288个连续0秒的列。或者,更一般地说,我们如何从包含&gt; = k连续NA s的0中删除列?

我对R比较陌生,任何帮助都会非常感激。谢谢!

编辑:这是一个可重复的例子。考虑到k = 4,我想删除A列和B列(但不是C,因为data.frame不是连续的。)

0

1 个答案:

答案 0 :(得分:1)

您可以在数据上使用此功能:

cons.Zeros <- function (x, n)
{
    x <- x[!is.na(x)] == 0
    r <- rle(x)
    any(r$lengths[r$values] >= n)
}

此函数返回TRUE表示需要删除的列。 n是您希望删除列的连续零的数量。

对于样本数据集,我们使用n = 3;

df.dropped <- df[, !sapply(df, cons.Zeros, n=3)]

#output:
# > df.dropped 

#    C  D 
# 1  4  1 
# 2  5  2 
# 3  6  3 
# 4  0  4 
# 5  3  5 
# 6  0  6 
# 7  2  7 
# 8  1  8 
# 9  0  9 
# 10 0 10