R编程:根据不同列中的数值选择行

时间:2016-01-12 10:16:31

标签: r

我找了类似的问题但是找不到根据不同列中的数值选择行的答案。我有一个这样的数据集(总共包括24个研究/列和超过28.000行)

    new_DF<-DF[which(as.numeric(DF$study1)<=0.05),] 

&GT;

我想创建一个包含所有列的新data.frame但仅包含至少一个研究(即一列)的值 0.05

因为我是R编程的初学者,所以我开始只为一个列编写代码过滤,并通过应用&#34;#34;

工作正常
    new_DF<-DF[which(as.numeric(DF$study*)<=0.05),] 

直到这里我对自己感到非常高兴:-)但是,我如何为多列调整这个?我尝试了一个通配符&#34; *&#34;

@Override
public void onResume() {
    super.onResume();
    TextView txt = ( TextView ) getActivity().findViewById(R.id.txt);
    txt.setText("nayak nahi , khalnayak hun mein");
}

但我收到错误说明&#34;错误:意外&#39;)&#39; in&#34; new_DF&lt; -DF [which(as.numeric(DF $ study *)&#34;。我也使用dplyd包,子集或grep函数尝试了不同的东西,但总是得到类似的错误消息。< / p>

任何人都可以帮助我吗? 非常感谢!

2 个答案:

答案 0 :(得分:0)

我们可以使用npm start --delte对至少一个小于或等于0.05的值进行子集化。将数据集转换为逻辑矩阵(rowSums - DF[-1] <= 0.05将删除非数字的第一列。上面的输出将有-1。当我们使用TRUE/FALSE/NA执行rowSums时,我们得到每行中小于或等于0.05的元素数量。对于第1行和第4行,没有满足条件的元素,因此总和将为0,而对于其他元素则不为0.当我们否定(na.rm=TRUE)时,0将转换为TRUE,其他所有都为FALSE 。但是,我们需要删除带0的行,所以再次否定将TRUE更改为FALSE,反之亦然。然后,我们使用此逻辑向量索引进行子集化。

!

答案 1 :(得分:0)

我想你的问题是你有大量的研究,对吧?你可以这样做,但可能有更好的方法:

header <- c("symbol", "gene1", "gene2", "gene3")
study1 <- c("0.06", "0.01", "NA", "NA")
study2 <- c("0.09", "NA", "0.02", "0.08")
study3 <- c("0.09", "NA", "NA", "0.1")
DF<- data.frame(header, study1, study2, study3, stringsAsFactors=FALSE)


nrstudies <-3 #change the number of studies to fit your study
text <- ""
formtext <-"(DF$studyNR <= 0.05)"

for(i in 1:nrstudies){
  newtext<-gsub("NR",i,formtext) # substitutes the Substring "NR" for i 

 if(i!=1){
          text<- paste(text, newtext, sep="|")
 }else{
          text <- newtext
 }
}

DF <- DF[eval(parse(text=text)),]