计算由缺失数据表示的范围 - R.

时间:2017-10-11 08:59:32

标签: r

我有一个数据集,其中的值代表位置(这是SNP /基因组学的工作)。

我试图找出一种方法来计算每一段缺失数据的距离(“间隙” - 如下所示为NA)。例如。 1466-1650 = 184

还想计算连续观测的延伸时间,但是一旦我弄清楚第一个问题,猜测就相对容易了。例如。 1450-1466 = 16

以下是有关数据组织方式的示例:

1450
1466
NA
NA
1650
1654
1943
NA
2568

这个问题与我下一期试图分析数据集中所有样本的问题有关 - 循环遍历每个样本 - 请see my question here

2 个答案:

答案 0 :(得分:3)

希望这样的事情会有所帮助:

选择非空行,然后找出它们之间的差异,然后将它们附加到除第一个索引之外的数据。

nonEmptyRows<-which(!is.na(df$data))
df[nonEmptyRows[-1], "gaps"]<-diff(df$data[nonEmptyRows])

 data gaps
 1450   NA
 1466   16
   NA   NA
   NA   NA
 1650  184
 1654    4
 1943  289
   NA   NA
 2568  625

答案 1 :(得分:0)

您可以使用rle函数(行程编码)执行此操作。像这样......

vec <- c(1450,1466,NA,NA,1650,1654,1943,NA,2568) #your data

rl <- rle(is.na(vec)) #rle on whether values are NA

这会产生

rl
Run Length Encoding
  lengths: int [1:5] 2 2 3 1 1
  values : logi [1:5] FALSE TRUE FALSE TRUE FALSE

那么你就可以计算出这样的间隙长度

gaps <- vec[cumsum(rl$lengths)[rl$values]+1] - #upper bound of each NA group
        vec[c(1,cumsum(rl$lengths))[rl$values]] #lower bound

gaps
[1] 184 625