计算缺失数据表示的范围-R
我有一个数据集,其中的值表示列中的位置(这是SNPs/基因组学工作) 我试图找出一种方法来计算每段缺失数据的距离(“间隙”-如下所示为NA)。例如,1466-1650=184 我也想计算连续观测的延伸,但我猜,一旦我解决了第一个问题,这将相对容易。例如,1450-1466=16 以下是一个关于数据组织方式的示例:计算缺失数据表示的范围-R,r,R,我有一个数据集,其中的值表示列中的位置(这是SNPs/基因组学工作) 我试图找出一种方法来计算每段缺失数据的距离(“间隙”-如下所示为NA)。例如,1466-1650=184 我也想计算连续观测的延伸,但我猜,一旦我解决了第一个问题,这将相对容易。例如,1450-1466=16 以下是一个关于数据组织方式的示例: 1450 1466 NA NA 1650 1654 1943 NA 2568 这个问题与我的下一期尝试分析数据集中的所有样本相关-循环分析每个样本-请希望类似的内容能有所帮助: 选择
1450
1466
NA
NA
1650
1654
1943
NA
2568
这个问题与我的下一期尝试分析数据集中的所有样本相关-循环分析每个样本-请希望类似的内容能有所帮助: 选择非空行,然后查找它们之间的差异,然后将它们附加到不包括第一个索引的数据
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
nonEmptyRows您可以使用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
然后你可以像这样算出间隙长度
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
谢谢!是否有办法将间隙长度(即NAs之后的第一个值-例如184)和连续长度(4+289)提取到单独的列中?谢谢!我正试图用continuous制作另一个专栏,使用:rl2计算出来,以防有人需要(PS单次观察报告为NA):cont
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