如何删除在R的所有列中具有相同值的行

问题描述:

我有一个具有〜4000行基因表达式的数据集。如何删除在R的所有列中具有相同值的行

DF<-read.table("Sample_DF.txt",header=T) 
head(DF, 4) 


# Gene_Symbol  X.U1.  X.T1.  X.U2.  X.T2. 
# 1  M1AP 0.0440509 0.1164950 0.0574035 0.0000000 
# 2  DRD4 0.0440114 0.0387834 0.0512446 0.0497801 
# 3  PCA3 0.0439278 0.0258183 0.0000000 0.0329761 
# 4  FAM153B 0.0439073 0.0409539 0.0658340 0.3767400 

tail(DF, 4) 

#  Gene_Symbol X.U1. X.T1. X.U2. X.T2. 
# 3992 LINC00353  0  0  0  0 
# 3993 LINC00359  0  0  0  0 
# 3994 LINC00366  0  0  0  0 
# 3995 LINC00379  0  0  0  0 

现在,我想删除所有列中包含0的所有行。 我已经通过这里所有类似的查询,并在其他网站的搜索和使用的代码:

DF_filtered <- DF[!apply(DF[,c(2:5)],1,function(z) all(z==0)),] 

DF_filtered <- DF[apply(DF[,c(2:5)],1,function(z) all(z!=0)),] 

DF_filtered <- DF[apply(DF[,c(2:5)],1,function(z) any(z!=0)),]. 

然而,没有工作,没有线正在从原始数据集中删除。有人可以帮我解决这个问题。

+1

尝试在read.table(na.strings =“0”)中读取设置。它会将数据帧中的所有0都转换为NAs,然后你可以使用'na.omit(DF)' – Nate

+0

作为将来的参考,你应该发布一个'dput(sample_DF)',这样每个有帮助的人都可以确保解决方案适用于您的具体案例 – Nate

+2

我与@NathanDay就此事达成了共识,但是如果您已经坚持使用加载的数据,我会使用'''df [!Reduce('&',lapply(df [-1],'==',0)),]''' –

如果你没有在列负值可以筛选根据符合的rowSums条件等于0

假设您的数据行的索引你的数据框被称为df

df <- df[-which(rowSums(df[2:5])==0), ]

编辑 - 包括基于TRUE/FALSE,而不是一个索引,可能潜在地是空的矢量的矢量由@akrun滤波建议更安全的方式:

df <- df[!rowSums(df[2:5])==0, ]

+0

正如你所建议的:我试过这个选项DF_filtered Debbie

+0

这4列是数字吗?你可以用'str(DF)'来检查。 'rowSums'不适用于字符或因子列。 – Warner

+0

非常感谢,在我的原始数据第二栏是染色体的位置,这就是我原来的代码没有工作的原因。感谢您指出。我可以成功地过滤我的数据。 – Debbie