我有以下数据:for循环再次
df1 <- data.frame(chrom=c("chr1","chr2","chr5"),
start=c(10,20,30), end=c(100,200,300), stringsAsFactors=FALSE)
df2 <- data.frame(chrom=c("chr1","chr4","chr2","chr1"),
start=c(15,500,150,200), end=c(75,1000,300,300), stringsAsFactors=FALSE)
我要做到以下几点:
for(i in 1:nrow(df2)) {
# only if this condition is true (i.e. if there is overlap)
if((df1$start <= df2$start && df1$end >= df2$start) ||
(df1$start >= df2$start && df1$start <= df2$end)) {
x <- df2[which(df2$chrom %in% df1$chrom),]
}
}
答案应该是:
df3 <- data.frame(chrom=c("chr1", "chr2"), start=c(15,150),
end=c(75,300), stringsAsFactors=FALSE)
对不起,所有的混乱。
人们一直非常耐心的回答我的问题,这是一个非常有帮助和学习的经历。然而,我想了解循环是如何工作的,而我越是思考它越容易混淆。例如:
for(i in 1:nrow(df2)) {
x <- df2[which(df2$chrom %in% df1$chrom),]
}
不作为如出一辙:
x <- df2[which(df2$chrom %in% df1$chrom),]
所以你甚至不需要一个循环。这怎么可能?我猜which
正在为你做循环?
什么是问题? (除了我以外,我看不到任何问号。) – OcuS 2012-04-10 19:08:35
循环是循环,无论是FORTRAN还是Julia。但你说得对,'''操作员可以做很酷的事情。我可以推荐你阅读R-inferno,http://www.burns-stat.com/pages/Tutor/R_inferno.pdf? – 2012-04-10 19:14:43
对于第二个问题,看看你的for循环。你*永远不会*使用变量我。这意味着你所做的全部工作是一次又一次地重新分配'x < - df2 [其中(df2 $ chrom%in%df1 $ chrom),]'' – 2012-04-10 19:23:47