我想过滤一组数据帧,首先用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,]
每当我尝试使用循环或apply
,sapply
,lapply
复制此内容时,我会结束对所有列应用更改或无法使用正确的列(它看起来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
答案 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)