我有以下数据
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....
答案 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