如何根据R中各列的条件选择行

时间:2013-11-27 04:37:54

标签: r dataframe

我有以下数据

Probe dumhead1 cond1 cond2 cond3
foo   dum1     1.5  3.2    3.0
bar   dum10    2.0  1.0    2.1
qux   dum22    0.4  2.3    2.2

我想要做的是每个cond 1 ..3 报告值大于2.0的探测器。

实际上,探测次数约为20k。

结果(手工完成):

> cond1
[1] "bar"
> cond2
[1] "foo" "qux"
> cond3
[1] "foo" "bar" "qux"

这样做的方法是什么? 我坚持使用这个代码.... 以循环方式完成,非常慢。

dat <- read.table("http://dpaste.com/1484534/plain/",sep=" ",header="TRUE")
 nofprobe <- nrow(dat)
 #...to be added....

2 个答案:

答案 0 :(得分:2)

使用apply()进行更多扩展:

apply(dat[,3:5],2,FUN=function(x)dat$Probe[x>=2])

# breaking down the function call:
apply(dat[,3:5],                      # the subset of columns to test
      2,                              # 2 means run apply() col-wise
      FUN=function(x)dat$Probe[x>=2]) # dat$Probe gives the levels
                                      # returns rows where val >=2 
                                      # for each column (passed by x)
已更新

编辑以使用来自`plyr'软件包的ddply()来设置个别条件:

    require(plyr)

    results<-ddply(dat,.(Probe),summarize,
          cond1=(cond1>=2),
          cond2=(cond2<2),
          cond3=(cond3>=0)
          )

    apply(results[,2:4],2,FUN=function(x)dat$Probe[x]) # this returns same format

答案 1 :(得分:1)

如果只有3个cond列,那么这似乎是合理的:

dat[dat$cond1 > 2, ]$Probe
dat[dat$cond2 > 2, ]$Probe
dat[dat$cond3 > 2, ]$Probe