我有一个包含〜4000行基因表达的数据集。
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)),].
但是,没有任何工作,也没有从原始数据集中删除任何行。请有人帮我解决这个问题。
答案 0 :(得分:4)
如果列中没有负值,则可以根据满足rowSums
条件等于0的行索引过滤数据帧。
假设您的数据被称为df
:
df <- df[-which(rowSums(df[2:5])==0), ]
编辑 - 包括基于TRUE / FALSE向量的@akrun建议的更安全的过滤方式,而不是可能为空的索引向量:
df <- df[!rowSums(df[2:5])==0, ]