-1

当我在某行中获得值时,我想选择数据框中的特定行。这些选定的行(加上初始选定的行)必须组成一个新的数据框,并且数据框名称必须是 =$Name在初始选定的行中。

逻辑:

1 - 初始选定的行必须具有$FC=> 0.7。

2 - 形成数据框的选定行必须$chr= 初始选定行。

3 - 所选行必须$Position在 5000 窗口内(与$Position初始所选行相比)。

*3a) 在此示例中,行$Name= BD22 不能包含在数据帧中BD13,因为$Position超出了窗口编号(5000 窗口到 3000 变化,因为$Position= 500 直到$Position= 5500)

下面是一个简化的例子:

我的输入input数据框:

 Name   FC   chr   Position 
 BD10   0.1  chr1    1000
 BD11   0.1  chr2    1000
 BD12   0.2  chr3    2000
 BD13   0.7  chr3    3000
 BD14   0.4  chr3    4000
 BD22   0.1  chr3    7000
 BD23   0.2  chr4    1000

我期望一个带有名称行的数据框作为输出,在这个例子中= BD13

Name   FC   chr   Position
BD12   0.2  chr3   2000
BD13   0.7  chr3   3000
BD14   0.4  chr3   4000

之后,我想像这样绘制每个组成的数据框:

pdf(BD13.pdf)
plot(BD13$Name, BD13$FC, main="BD13",
   xlab="Name", ylab="FC")
dev.off()

我试过了:

out <- subset(input, FC >= 0.7)
out$startw <- (out$Position - 2500)
out$endw <- (out$Position + 2500)


library(plyr)
lvl <- dlply(out, .(Name))

for (i in 1:length(lvl)) {
  Neigh1 <- subset(input, input$Position >= lvl[i]$startw & lvl[i]$chr == input$chr)
  Neigh2 <- subset(input, input$Position <= lvl[i]$endw & lvl[i]$chr == input$chr)
  Neight <- rbind(Neigh1, Neigh2)

pdf(sprintf("%s.pdf", [i]))
boxplot(Neigh$Name, Neigh$FC, xlab=[i], ylab="FC", main="[i]")
dev.off()}

但是Neigh1Neigh2是空的...谢谢!

4

1 回答 1

1

除非您真的想要,否则基于以下元素创建所有这些新变量是个坏主意,input$name因为:

  • 如果input$name包含与另一个变量冲突的名称(例如“输入”),您可能会遇到难以追踪的错误

  • 您可能会用许多变量弄乱您的工作区

  • 在不使用深奥的 R 代码或复制和粘贴大量代码的情况下,很难(呃)循环变量以绘制它们。

我建议创建如下列表:

rows <- 1:nrow(input)
res <- lapply(which(input$FC>=0.7),function(x) {
           x2 <- rows 
           x2<- input$chr[x2] == input$chr[x] & abs(input$Position[x2] - input$Position[x]) < 2500
          input[x2,]})
names(res) <- input$Name[input$FC>=0.7]  ##corrected this line

其中列表的每个元素都是您要创建的变量之一。访问为res[["BD13"]]or res[[1]]- 后一种形式可以很容易地在循环中生成所有图。

编辑:

要进行绘图,我认为您需要以下内容(目前无法测试):

for (i in 1:length(res)) {   
  pdf(sprintf("%s.pdf", names(res)[i]))   
  boxplot(res[[i]]$Name, res[[i]]$FC, xlab=res[[i]]$Name, ylab="FC", main=names(res)[i])   
  dev.off()
} 

但检查 boxplot 的参数 - 我认为第一个不应该是文本

res[i]是一个列表(长度为 1),包含 的i第 个元素res,而res[[i]]是第ith 个元素本身。

于 2014-05-13T12:36:13.160 回答