我有一个巨大的<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
答案 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