我找了类似的问题但是找不到根据不同列中的数值选择行的答案。我有一个这样的数据集(总共包括24个研究/列和超过28.000行)
new_DF<-DF[which(as.numeric(DF$study1)<=0.05),]
&GT;
我想创建一个包含所有列的新data.frame但仅包含至少一个研究(即一列)的值
因为我是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>
任何人都可以帮助我吗? 非常感谢!
答案 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)),]