R 根据列中的值和阈值保持值删除行
我有一张桌子,开始如下:R 根据列中的值和阈值保持值删除行,r,bioinformatics,R,Bioinformatics,我有一张桌子,开始如下: SM_H1455 SM_H1456 SM_H1457 SM_H1461 SM_H1462 SM_H1463 ENSG00000001617.7 0 0 0 0 0 0 ENSG00000001626.9 0
SM_H1455 SM_H1456 SM_H1457 SM_H1461 SM_H1462 SM_H1463
ENSG00000001617.7 0 0 0 0 0 0
ENSG00000001626.9 0 0 0 0 0 0
ENSG00000002587.5 10 0 6 2 0 2
ENSG00000002726.15 8 14 0 2 16 2
ENSG00000002745.8 6 2 2 0 0 4
我想删除>=80%的列的值为0的行。这里有6列,如果一行中有5列或更多列的值为0,那么该行需要删除
我目前有以下代码:
data = data[!rowSums(data == 0), ]
但这段代码删除所有行,只要它们有一个0,而不考虑80%的阈值保持 你很接近:
data <- data[rowSums(data != 0)/ncol(data) > 0.2, ]
数据0.2,]
我认为@Hong Ooi的答案在这种情况下是不正确的。这将为您提供您要求的结果:
data <- data[rowSums(data==0)/ncol(data) < 0.8, ]
data Hi,sry可能会很痛苦,但您介意解释一下您的代码吗?用ncol
除以rowSums
有什么作用?哎呀,省去了!=行和中的0
。正如@Cnrl所解释的那样。删除包含80%或更多零的行与保留包含20%或更多非零的行相同。非常感谢您的详细解释!很清楚:——)