for循环中的R增量向量

for循环中的R增量向量,r,loops,vector,R,Loops,Vector,我有一个称为“pvalue”的表,共61列: 第一个是样本“IdEch”的名称 所有其他列都是名为Pvalue1到Pvalue60的不同pvalues 我想选择所有显示至少一个小于0.01的值的“IdEch” 我尝试在每个列上执行for循环(选择Pvalue

我有一个称为“pvalue”的表,共61列:

  • 第一个是样本“IdEch”的名称
  • 所有其他列都是名为Pvalue1到Pvalue60的不同pvalues 我想选择所有显示至少一个小于0.01的值的“IdEch”
我尝试在每个列上执行for循环(选择Pvalue<0.01) 但我没能把这个想法记录在向量中。我只有列的编号…这是无用的。。。我没有找到解决办法

这是我的剧本:

res = data.frame()

list_pvalue = c()

for (i in 2:ncol(pvalue)) {

  res = subset( pvalue , pvalue[,i] < 0.01 ) 

  list_pvalue = c(res$IdEch,list_pvalue)

}

list_pvalue = unique(list_pvalue)
res=data.frame()
list_pvalue=c()
对于(i/2:ncol(pvalue)){
res=子集(pvalue,pvalue[,i]<0.01)
列表值=c(res$IdEch,列表值)
}
列表值=唯一(列表值)

你就快到了。您希望为每一行查找任何p值为
<0.01
的行

要对每行执行操作,请使用
apply
。若要查看任何值是否为真,请使用
any
?apply
?any

#pvalue[,-1]选择除第一列以外的所有列
#pvalue[,-1]<0.01是一个逻辑数据帧,为真/假
#应用(X,1,FUN)将FUN应用于X的每一行
#对于pvalue<0.01的每一行,apply(pvalue[,-1]<0.01,1,any)为真
pvalue[apply(pvalue[,-1]<0.01,1,任意),]#是您所追求的

你就快到了。您希望为每一行查找任何p值为
<0.01
的行

要对每行执行操作,请使用
apply
。若要查看任何值是否为真,请使用
any
?apply
?any

#pvalue[,-1]选择除第一列以外的所有列
#pvalue[,-1]<0.01是一个逻辑数据帧,为真/假
#应用(X,1,FUN)将FUN应用于X的每一行
#对于pvalue<0.01的每一行,apply(pvalue[,-1]<0.01,1,any)为真
pvalue[apply(pvalue[,-1]<0.01,1,任意),]#是您所追求的
试试下面的例子

#dummy data
set.seed(123)
pvalue <- data.frame(IdEch=paste0("ID",1:10),
                     Pvalue1=runif(10,0,0.05),
                     Pvalue2=runif(10,0,0.05),
                     Pvalue3=runif(10,0,0.05),
                     Pvalue4=runif(10,0,0.05),stringsAsFactors = FALSE)

pvalue
#    IdEch     Pvalue1     Pvalue2     Pvalue3     Pvalue4
# 1    ID1 0.014378876 0.047841667 0.044476966 0.048151212
# 2    ID2 0.039415257 0.022666708 0.034640170 0.045114952
# 3    ID3 0.020448846 0.033878532 0.032025341 0.034535264
# 4    ID4 0.044150870 0.028631670 0.049713489 0.039773371
# 5    ID5 0.047023364 0.005146234 0.032785290 0.001230684
# 6    ID6 0.002277825 0.044991249 0.035426523 0.023889799
# 7    ID7 0.026405274 0.012304387 0.027203301 0.037922977
# 8    ID8 0.044620952 0.002102977 0.029707101 0.010820397
# 9    ID9 0.027571751 0.016396036 0.014457987 0.015909050
# 10  ID10 0.022830737 0.047725182 0.007355682 0.011581289

pvalue[ rowSums(pvalue[,-1] < 0.01) > 1, "IdEch" ]
# [1] "ID5"
#虚拟数据
种子集(123)
pvalue 1,“IdEch”]
#[1]“ID5”
试试下面的例子

#dummy data
set.seed(123)
pvalue <- data.frame(IdEch=paste0("ID",1:10),
                     Pvalue1=runif(10,0,0.05),
                     Pvalue2=runif(10,0,0.05),
                     Pvalue3=runif(10,0,0.05),
                     Pvalue4=runif(10,0,0.05),stringsAsFactors = FALSE)

pvalue
#    IdEch     Pvalue1     Pvalue2     Pvalue3     Pvalue4
# 1    ID1 0.014378876 0.047841667 0.044476966 0.048151212
# 2    ID2 0.039415257 0.022666708 0.034640170 0.045114952
# 3    ID3 0.020448846 0.033878532 0.032025341 0.034535264
# 4    ID4 0.044150870 0.028631670 0.049713489 0.039773371
# 5    ID5 0.047023364 0.005146234 0.032785290 0.001230684
# 6    ID6 0.002277825 0.044991249 0.035426523 0.023889799
# 7    ID7 0.026405274 0.012304387 0.027203301 0.037922977
# 8    ID8 0.044620952 0.002102977 0.029707101 0.010820397
# 9    ID9 0.027571751 0.016396036 0.014457987 0.015909050
# 10  ID10 0.022830737 0.047725182 0.007355682 0.011581289

pvalue[ rowSums(pvalue[,-1] < 0.01) > 1, "IdEch" ]
# [1] "ID5"
#虚拟数据
种子集(123)
pvalue 1,“IdEch”]
#[1]“ID5”
给出不带IdEch列的数据帧。将
pmin
应用于此,可以获得每行中的最小值。如果某个值小于0.01,则最小值为

do.call("pmin", pvalue[-1]) < 0.01
do.call(“pmin”,pvalue[-1])<0.01
然后给出具有较小值的行索引。所以

pvalue[do.call("pmin", pvalue[-1]) < 0.01]
pvalue[do.call(“pmin”,pvalue[-1])<0.01]
应该是你想要的

给出不带IdEch列的数据帧。将
pmin
应用于此,可以获得每行中的最小值。如果某个值小于0.01,则最小值为

do.call("pmin", pvalue[-1]) < 0.01
do.call(“pmin”,pvalue[-1])<0.01
然后给出具有较小值的行索引。所以

pvalue[do.call("pmin", pvalue[-1]) < 0.01]
pvalue[do.call(“pmin”,pvalue[-1])<0.01]

应该是你想要的。

谢谢!你的回答和@kasterma的这句话非常有效。我选择了你的,因为跑步时间短了一点。谢谢!你的回答和@kasterma的这句话非常有效。我选择了你的,因为运行时间有点短。也是非常有趣的选择。我删除了“IdEch”,否则它不起作用..:。pvalue[rowSums(pvalue[,-1]<0.01)>=1,]@Sandrine它适用于虚拟数据,如果您的数据结构与我的示例不同,请提供可复制的数据。这也是一个非常有趣的选项。我删除了“IdEch”,否则它不起作用..:。pvalue[rowSums(pvalue[,-1]<0.01)>=1,]@Sandrine它使用虚拟数据,如果您的数据结构与我的示例不同,请提供可复制的数据。