我是r的初学者,并尝试删除所有行,其中包含的值小于"控件"或每列中的最后一行。对于此示例数据:
A B C D E
gene1 14 6 8 16 14
gene2 5 6 10 6 4
gene3 2 4 6 3 4
gene4 26 6 18 39 36
gene5 1 2 3 1 2
gene6 2 1 3 1 1
control 8 5 5 4 11
我想删除所有低于控件(包括控件)的行,导致:
gene1 14 6 8 16 14
gene4 26 6 18 39 36
提前谢谢!! (对不起,我不知道如何发布这个问题。希望你能理解我的意思。)
答案 0 :(得分:3)
这样就无法删除data.frame
中的任何内容。您只能子集一个data.frame
。然后,您可以将此子集分配给任何变量。首先初始化data.frame:
df <- read.table(text = "
A B C D E
gene1 14 6 8 16 14
gene2 5 6 10 6 4
gene3 2 4 6 3 4
gene4 26 6 18 39 36
gene5 1 2 3 1 2
gene6 2 1 3 1 1
control 8 5 5 4 11
", header = TRUE)
现在,在矩阵上进行操作变得更容易,并进行转置。然后就像它一样简单:
m <- t(as.matrix(df))
df[apply(m > m[,'control'], 2, all),]
# A B C D E
# gene1 14 6 8 16 14
# gene4 26 6 18 39 36
首先,比较所有矩阵元素(m > m[,'control']
),然后按行执行all
(逻辑AND)操作(sensu df
,实际上它是由转置的列完成的矩阵)。最后,您将df
。
答案 1 :(得分:1)
这是解决方案。
coolFun<-function(dat,control_vec){ #alternatively you can remove control_vec from here
aux<-c()
for(i in 1:nrow(dat)) # iterate to nrow(dat)-1 only
if(all(dat[i,]>control_vec)==TRUE) #and change it with dat[nrow(dat),]
aux<-rbind(aux,dat[i,])
}
aux
}