为什么要用';应用';在数据帧中不';我不能在R工作

为什么要用';应用';在数据帧中不';我不能在R工作,r,dataframe,selection,R,Dataframe,Selection,我有一个数据,看起来像 我想做的是简单地选择所有值都大于10的行。 但为什么我的代码只报告最后一个? 数据清楚地表明,满足此条件的行更多 > dat<-read.delim("http://dpaste.com/1215552/plain/",sep="|",na.strings="",header=TRUE,blank.lines.skip=TRUE,fill=FALSE) 正确的方法是什么 更新: alexwhan的解决方案有效。但我想知道我怎样才能概括他的方法 以便它可以处理

我有一个数据,看起来像

我想做的是简单地选择所有值都大于10的行。 但为什么我的代码只报告最后一个? 数据清楚地表明,满足此条件的行更多

> dat<-read.delim("http://dpaste.com/1215552/plain/",sep="|",na.strings="",header=TRUE,blank.lines.skip=TRUE,fill=FALSE)
正确的方法是什么

更新: alexwhan的解决方案有效。但我想知道我怎样才能概括他的方法 以便它可以处理缺少值的数据(NA)


dat既然你在
all()
中包含了你的
ID
列(这是一个因素),它就变得一团糟了。尝试:

dat[apply(dat[, -c(1,2)], MARGIN = 1, function(x) all(x > 10)), ]

#              Name           ID   p72   p78   p51   p49 c36.1 c32.1 c32.2 c36.2   c37
# 16  hsa-miR-22-3p MIMAT0000077  40.4 128.4  65.4 547.1  56.5  33.4 104.9  84.1 248.3
# 17 hsa-miR-23a-3p MIMAT0000078  58.3  99.3  58.6 617.9  36.6  21.4 107.1 125.5 120.9
# 19  hsa-miR-24-3p MIMAT0000080 638.2 286.9 379.5 394.4 307.8 240.4 186.0 234.2 564.0

编辑

对于有
NA
的情况,只需使用
all()
NA.rm
参数即可。使用您的新数据(来自评论):

dat 10,na.rm=T)),]
#V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
#7 hsa-miR-15a-5p MIMAT0000068 NA 70.3 10.3 147.6 NA 21.1 30.2 100.8
#16 hsa-miR-22-3p MIMAT000077 40.4 128.4 65.4 547.1 56.5 33.4 104.9 84.1 248.3
#17 hsa-miR-23a-3p MIMAT0000078 58.3 99.3 58.6 617.9 36.6 21.4 107.1 125.5 120.9
#19 hsa-miR-24-3p MIMAT000080638.2286.9379.5394.4307.8240.4186.0234.2564.0
#20 hsa-miR-25-3p MIMAT0000081 19.3 78.6 25.6 84.3 14.9 16.9 19.1 27.2 113.8
#21 hsa-miR-26a-5p MIMAT0000082 NA 22.8 31.0 561.2 12.4 NA 67.0 55.8 48.9

另一个想法是将数据转换为长格式(或莫尔顿格式)。我认为更好的做法是避免以下方面的值缺失问题:

library(reshape2)
dat.m <- melt(dat,id.vars=c('Name','ID'))
dat.m$value <- as.numeric(dat.m$value)
library(plyr)
res <- ddply(dat.m,.(Name,ID), summarise, keepme = all(value > 10))
res[res$keepme,]
# Name           ID keepme
# 16  hsa-miR-22-3p MIMAT0000077   TRUE
# 17 hsa-miR-23a-3p MIMAT0000078   TRUE
# 19  hsa-miR-24-3p MIMAT0000080   TRUE
library(重塑2)

非常感谢。它起作用了。但是,我如何推广您的方法,使其能够处理缺少值的数据呢<代码>dat@neversaint查看编辑是否适合您。对于您的第一个示例,我无法理解为什么
dat[,19]
返回
TRUE
,这似乎很奇怪。可能值得一个单独的问题我想这取决于OP是否希望
NA
导致逻辑测试失败-只是意识到问题中不清楚。如果你有NA,那么
。。。全部(x[!is.na(x)]>10))
BTW。。。“不起作用”太模糊了,没有意义。它应该从计算机相关的话语中删除。
dat<-read.delim("http://dpaste.com/1215354/plain/",sep="\t",na.strings="",heade‌​r=FALSE,blank.lines.skip=TRUE,fill=FALSE) 
dat[apply(dat[, -c(1,2)], MARGIN = 1, function(x) all(x > 10)), ]

#              Name           ID   p72   p78   p51   p49 c36.1 c32.1 c32.2 c36.2   c37
# 16  hsa-miR-22-3p MIMAT0000077  40.4 128.4  65.4 547.1  56.5  33.4 104.9  84.1 248.3
# 17 hsa-miR-23a-3p MIMAT0000078  58.3  99.3  58.6 617.9  36.6  21.4 107.1 125.5 120.9
# 19  hsa-miR-24-3p MIMAT0000080 638.2 286.9 379.5 394.4 307.8 240.4 186.0 234.2 564.0
dat<-read.delim("http://dpaste.com/1215354/plain/",sep="\t",na.strings="",header=FALSE,blank.lines.skip=TRUE,fill=FALSE)
dat[apply(dat[, -c(1,2)], MARGIN = 1, function(x) all(x > 10, na.rm = T)), ]

#                V1           V2    V3    V4    V5    V6    V7    V8    V9   V10   V11
# 7  hsa-miR-15a-5p MIMAT0000068    NA  70.3  10.3 147.6    NA    NA  21.1  30.2 100.8
# 16  hsa-miR-22-3p MIMAT0000077  40.4 128.4  65.4 547.1  56.5  33.4 104.9  84.1 248.3
# 17 hsa-miR-23a-3p MIMAT0000078  58.3  99.3  58.6 617.9  36.6  21.4 107.1 125.5 120.9
# 19  hsa-miR-24-3p MIMAT0000080 638.2 286.9 379.5 394.4 307.8 240.4 186.0 234.2 564.0
# 20  hsa-miR-25-3p MIMAT0000081  19.3  78.6  25.6  84.3  14.9  16.9  19.1  27.2 113.8
# 21 hsa-miR-26a-5p MIMAT0000082    NA  22.8  31.0 561.2  12.4    NA  67.0  55.8  48.9
library(reshape2)
dat.m <- melt(dat,id.vars=c('Name','ID'))
dat.m$value <- as.numeric(dat.m$value)
library(plyr)
res <- ddply(dat.m,.(Name,ID), summarise, keepme = all(value > 10))
res[res$keepme,]
# Name           ID keepme
# 16  hsa-miR-22-3p MIMAT0000077   TRUE
# 17 hsa-miR-23a-3p MIMAT0000078   TRUE
# 19  hsa-miR-24-3p MIMAT0000080   TRUE