使用R循环几个数据帧

时间:2015-01-27 15:02:10

标签: r loops

我想过滤一组数据帧,首先用p.value过滤,然后用t的值除以它。

这就是我只为一个数据框做的。

p.value.cut <- which(top_Na1$P.Value < 0.05)
top_Na1 <- top_Na1[p.value.cut,]    

up <- which(top_Na1$t > 0)
down <- which(top_Na1$t < 0)

up.p.value <- top_Na1[up,]
down.p.value <- top_Na1[down,]

每当我尝试使用循环或applysapplylapply复制此内容时,我会结束对所有列应用更改或无法使用正确的列(它看起来for循环不使用整个数据框但是它逐列)或者我只是丢失了数据框的行名(就像一些apply)。

这是其中一个数据框的样子(都是相同的)。

               logFC         t     P.Value  adj.P.Val         B
YMR290C   -0.1952028 -4.593506 0.003484478 0.03596870 -1.602151
YBR090C   -0.3406244 -4.373073 0.004429437 0.03930581 -1.857238
YPL037C   -0.8737048 -4.088782 0.006100105 0.04526780 -2.197584
YGL035C   -0.3058778 -3.839335 0.008159371 0.05142077 -2.506721

2 个答案:

答案 0 :(得分:1)

感谢。它已经解决了。问题在于我创建列表的方式。

这种方式很有效。

l <- list(top_Na1, top_Na2)

function_filtering <- function(x){
  p.value.cut <- which(x$P.Value < 0.05)
  x <- x[p.value.cut,]    

  up <- which(x$t > 0)
  down <- which(x$t < 0)

  up.p.value <- x[up,]
  down.p.value <- x[down,]

  }

  lapply(l, function_filtering)

答案 1 :(得分:0)

假设“/tmp/dat.txt”包含您的示例data.frame。下面的代码应该做你想要的。

d <- read.table("/tmp/dat.txt")
d[1,"P.Value"] <- 0.05 # to make the example more general
d[2,"t"] <- -d[2,"t"] # to make the example more general
input <- list(d,d) # generating a list of data frames for testing purposes

cutIt <- function(x) {
  y <- x[x$P.Value < 0.05,]
  list(up=y[y$t > 0,],down=y[y$t <= 0,])
}

lapply(input,cutIt)