使用for循环执行步骤15,并将向量与数据帧列匹配
我有一系列的数字是0或1。总长度为35115,如果采用35115/15,则有2341个区块。我想逐步遍历每个块,看看我的向量tmp是否与包含这些块的感兴趣列相匹配。我想沿着我的数据帧排序,但采取步骤15,并询问这15是否匹配我的向量。 我做错了什么?有人能帮我吗?谢谢你们教我一些有用的东西。干杯使用for循环执行步骤15,并将向量与数据帧列匹配,r,for-loop,match,seq,R,For Loop,Match,Seq,我有一系列的数字是0或1。总长度为35115,如果采用35115/15,则有2341个区块。我想逐步遍历每个块,看看我的向量tmp是否与包含这些块的感兴趣列相匹配。我想沿着我的数据帧排序,但采取步骤15,并询问这15是否匹配我的向量。 我做错了什么?有人能帮我吗?谢谢你们教我一些有用的东西。干杯 x; V1 V2 V3 V4 V5 V6 V7 3R 11024348 A G A1 0 61 3R 11024348 A G A2 1 30 3R
x;
V1 V2 V3 V4 V5 V6 V7
3R 11024348 A G A1 0 61
3R 11024348 A G A2 1 30
3R 11024348 A G A3 0 68
3R 11024348 A G A4 0 57
3R 11024348 A G A5 0 63
3R 11024348 A G A6 0 49
3R 11024348 A G A7 0 60
3R 11024348 A G B1 0 63
3R 11024348 A G B2 0 64
3R 11024348 A G B3 0 71
3R 11024348 A G B4 1 51
3R 11024348 A G B5 0 37
3R 11024348 A G B6 0 52
3R 11024348 A G B7 0 47
3R 11024348 A G AB8 0 83
3R 11024410 C T A1 0 45
3R 11024410 C T A2 1 54
3R 11024410 C T A3 0 76
3R 11024410 C T A4 0 48
3R 11024410 C T A5 0 49
3R 11024410 C T A6 1 48
3R 11024410 C T A7 0 45
3R 11024410 C T B1 0 48
3R 11024410 C T B2 0 81
3R 11024410 C T B3 1 58
3R 11024410 C T B4 1 50
3R 11024410 C T B5 0 65
3R 11024410 C T B6 1 45
3R 11024410 C T B7 0 66
3R 11024410 C T AB8 0 58
tmp<-c(1,1,0,1,1,1,1,1,1,1,1,1,0,0,0)
for(i in seq(from=1, to=length(X$V6), by=15)){print(matchID<-match(tmp,X$V6[i]))}
x;
V1 V2 V3 V4 V5 V6 V7
3R 11024348 A G A1 0 61
3R 11024348 A G A2 1 30
3R 11024348 A G A3 0 68
3R 11024348 A G A4 0 57
3R 11024348 A G A5 0 63
3R 11024348 A G A6 0 49
3R 11024348 A G A7 0 60
3R 11024348 A G B1 0 63
3R 11024348 A G B2 0 64
3R 11024348 A G B3 0 71
3R 11024348 A G B4 1 51
3R 11024348 A G B5 0 37
3R 11024348 A G B6 0 52
3R 11024348 A G B7 0 47
3R 11024348 A G AB8 0 83
3R 11024410 C T A1 0 45
3R 11024410 C T A2 1 54
3R 11024410 C T A3 0 76
3R 11024410 C T A4 0 48
3R 11024410 C T A5 0 49
3R 11024410 C T A6 1 48
3R 11024410 C T A7 0 45
3R 11024410 C T B1 0 48
3R 11024410 C T B2 0 81
3R 11024410 C T B3 1 58
3R 11024410 C T B4 1 50
3R 11024410 C T B5 0 65
3R 11024410 C T B6 1 45
3R 11024410 C T B7 0 66
3R 11024410 C T AB8 0 58
tmp关于预期输出,我不完全确定,但可能是:
首先复制数据:
x <- read.table(text = " V1 V2 V3 V4 V5 V6 V7
3R 11024348 A G A1 0 61
3R 11024348 A G A2 1 30
3R 11024348 A G A3 0 68
3R 11024348 A G A4 0 57
3R 11024348 A G A5 0 63
3R 11024348 A G A6 0 49
3R 11024348 A G A7 0 60
3R 11024348 A G B1 0 63
3R 11024348 A G B2 0 64
3R 11024348 A G B3 0 71
3R 11024348 A G B4 1 51
3R 11024348 A G B5 0 37
3R 11024348 A G B6 0 52
3R 11024348 A G B7 0 47
3R 11024348 A G AB8 0 83
3R 11024410 C T A1 0 45
3R 11024410 C T A2 1 54
3R 11024410 C T A3 0 76
3R 11024410 C T A4 0 48
3R 11024410 C T A5 0 49
3R 11024410 C T A6 1 48
3R 11024410 C T A7 0 45
3R 11024410 C T B1 0 48
3R 11024410 C T B2 0 81
3R 11024410 C T B3 1 58
3R 11024410 C T B4 1 50
3R 11024410 C T B5 0 65
3R 11024410 C T B6 1 45
3R 11024410 C T B7 0 66
3R 11024410 C T AB8 0 58", header = TRUE)
tmp<-c(1,1,0,1,1,1,1,1,1,1,1,1,0,0,0)
一个可能更快的替代方法是将data.frame的列转换为矩阵,并执行以下操作:
colSums(matrix(x$V6, nrow = 15) == tmp) == 15L
#[1] FALSE FALSE
如果您真的想为循环使用,
,则需要定义一个数据结构来存储循环结果(可以是数字、字符串、列表、矩阵等的向量)
类似于matchIDPlease的东西提供了一个最小的可重复性示例。罗兰:任何数据都可以工作,但这里是真实数据的一小部分。我想在15步中匹配x$V6到tmp。这里有两个步骤,为什么会有反对票?我提供了一个具体的问题与具体的需求和一个循环的例子,我不能工作?嗨,罗兰,这是一个伟大的方式做我问的,我甚至没有考虑。来个forloop怎么样?我问,因为它困扰着我,我无法计算forloop。我不明白你在那里用print
和match
做什么,但基本思想是你需要计算索引,即I+0:14
。嗨,罗兰,我不太习惯聚合函数。如果你真的找到了一个匹配项,有没有一种简单的方法可以在数据帧中反转并拉出匹配项?谢谢迈克,这是一个巨大的帮助。我对如何做到这一点进行了思考,得到了3个答案。
colSums(matrix(x$V6, nrow = 15) == tmp) == 15L
#[1] FALSE FALSE
for(i in seq(from=1, to=length(X$V6), by=15)){print(matchID<-match(tmp,X$V6[i]))}
>for(i in seq(1,30,15)) print(i)
[1] 1
[1] 16
matchID<-vector() # stores the loop return in a vector
for(i in 1:length(x[, "V6"]){
matchID[i]<- as.numeric(tmp == x[, "V6"])[i]
}
matchID<-as.numeric(tmp == x[, "V6"])