我有一个数据集,其中的值代表位置(这是SNP /基因组学的工作)。
我试图找出一种方法来计算每一段缺失数据的距离(“间隙” - 如下所示为NA)。例如。 1466-1650 = 184
还想计算连续观测的延伸时间,但是一旦我弄清楚第一个问题,猜测就相对容易了。例如。 1450-1466 = 16
以下是有关数据组织方式的示例:
1450
1466
NA
NA
1650
1654
1943
NA
2568
这个问题与我下一期试图分析数据集中所有样本的问题有关 - 循环遍历每个样本 - 请see my question here
答案 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