Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 检测列中的不同级别_R - Fatal编程技术网

R 检测列中的不同级别

R 检测列中的不同级别,r,R,我有一个列,有大约80k个条目,其中只有22个不同级别的染色体数目。在R中有没有什么快速的技巧来找出一个关卡在哪个位置变为下一个关卡。。。那么,为了弄清楚在哪一行1号染色体变为2号染色体,单个染色体的所有条目都列在一起了 我的数据如下所示: chr number marker name (SNP) 1 rs... 1 rs... . . 2 谢谢如果我没弄错你的问题,你可以用rle来解决这个问题: x <- rep(LETTERS[

我有一个列,有大约80k个条目,其中只有22个不同级别的染色体数目。在R中有没有什么快速的技巧来找出一个关卡在哪个位置变为下一个关卡。。。那么,为了弄清楚在哪一行1号染色体变为2号染色体,单个染色体的所有条目都列在一起了

我的数据如下所示:

chr number  marker name (SNP) 
1              rs...
1              rs...
.
.
2
谢谢

如果我没弄错你的问题,你可以用rle来解决这个问题:

x <- rep(LETTERS[1:22], each = 3)
x
# [1] "A" "A" "A" "B" "B" "B" "C" "C" "C" "D" "D" "D" "E" "E" "E" "F" "F" "F" "G" "G" "G" "H" "H" "H" #"I" "I" "I" "J" "J" "J" "K" "K" "K" "L" "L" "L" "M" "M" "M" "N" "N" "N" "O" "O" "O" "P" "P" "P" #"Q" "Q" "Q" "R" "R" "R" "S" "S" "S" "T" "T" "T" "U" "U" "U" "V" "V" "V"
rles <- rle(x)
cumsum(rles$lengths)
# [1]  3  6  9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66
检查差异是否为非零。这将返回一个逻辑向量,当连续值不相同时,该向量为真。将其包装以获取数字标记

(x <- factor(sample(c("a", "b"), 15, replace = TRUE)))
# [1] a a b b a a b b b b b a b a a
# Levels: a b
diff(as.integer(x)) != 0
# [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE
which(diff(as.integer(x)) != 0)
# [1]  2  4  6 11 12 13
您可以使用unique和match from base R:


Match返回其第一个参数的第一个匹配项在其第二个参数中的位置向量。这是因为一条染色体的所有条目都列在一起。

你能发布一个数据示例吗?您好,我的问题是每条染色体上的标记数不是恒定的,chr 1大约还有3k chr 2……rle在没有each参数的情况下也能工作吗?这是否意味着cumsumrles$Length可以完成这项工作?所以不是每个元素都需要有相同的长度,比如你的例子中的3次重复?你没有提供[repeatable example]tinyurl.com/repeatable-000,所以我只是编了一个例子。x这将如何向我返回染色体中存在开关的精确值?@TimHeinert:为您添加了更多解释和替代解决方案。在这种情况下,数据将只是我的第一列,不是吗?@TimHeinert是的,没错!因此,在您的情况下,匹配uniquemydata$chr,mydata$chr
(x2 <- factor(rep(c("a", "b", "c"), times = c(3, 4, 6))))
# [1] a a a b b b b c c c c c c
# Levels: a b c
!duplicated(x2)
# [1]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
which(!duplicated(x2))
# [1] 1 4 8
data <- c(rep("a",10),rep("b",5),rep("c",2),rep("d",10))
match( unique(data) , data )
#[1]  1 11 16 18