2016-04-06 17 views
0

filtre satırları Sütunlardan birinde 0 satırları filtreleyen bir kod var. Bunu, sütunların 48 veya daha fazlasında (% 50) 0 içeren satırları filtrelemesi için değiştirmek istiyorum. Bu nasıl yapılabilir?sütunların% 50'sinin olduğu 0

geçerli kod:

mature2[!(apply(mature2, 1, function(y) any(y == 0))),])  

veri

> dput(head(mature2,2) 
+) 
structure(list(`100G` = c(310L, 142504L), `100R` = c(368L, 203538L 
), `106G` = c(183L, 40788L), `106R` = c(406L, 60772L), `122G` = c(476L, 
199748L), `122R` = c(415L, 212439L), `124G` = c(190L, 41003L), 
    `124R` = c(453L, 93523L), `126G` = c(456L, 100404L), `126R` = c(121L, 
    62423L), `134G` = c(788L, 270102L), `134R` = c(369L, 163493L 
    ), `141G` = c(468L, 124348L), `141R` = c(375L, 150040L), 
    `167G` = c(351L, 224537L), `167R` = c(268L, 120624L), `185G` = c(637L, 
    98900L), `185R` = c(649L, 234184L), `192G` = c(261L, 159325L 
    ), `192R` = c(418L, 225527L), `235G` = c(733L, 132638L), 
    `235R` = c(359L, 93605L), `239G` = c(141L, 80773L), `239R` = c(214L, 
    118840L), `240G` = c(0L, 66L), `240R` = c(0L, 41L), `243G` = c(580L, 
    121361L), `243R` = c(509L, 169945L), `246G` = c(35L, 16008L 
    ), `246R` = c(229L, 117362L), `261G` = c(573L, 183687L), 
    `261R` = c(406L, 124865L), `267G` = c(298L, 184937L), `267R` = c(234L, 
    102697L), `26G` = c(497L, 244302L), `26R` = c(277L, 122537L 
    ), `270G` = c(303L, 90109L), `270R` = c(533L, 292492L), `279G` = c(37L, 
    16753L), `279R` = c(194L, 115152L), `299G` = c(440L, 96887L 
    ), `299R` = c(129L, 15098L), `301G` = c(196L, 42525L), `301R` = c(335L, 
    48643L), `305G` = c(393L, 93782L), `305R` = c(403L, 136864L 
    ), `335G` = c(1L, 33L), `335R` = c(1L, 39L), `342G` = c(85L, 
    27755L), `342R` = c(351L, 151451L), `350G` = c(395L, 75952L 
    ), `350R` = c(270L, 78530L), `356G` = c(470L, 166201L), `356R` = c(241L, 
    104167L), `35G` = c(169L, 28662L), `35R` = c(347L, 99143L 
    ), `361G` = c(346L, 133945L), `361R` = c(115L, 80000L), `366G` = c(192L, 
    75795L), `366R` = c(182L, 55616L), `367G` = c(331L, 119765L 
    ), `367R` = c(191L, 87176L), `377G` = c(155L, 53086L), `377R` = c(307L, 
    167251L), `379G` = c(48L, 13888L), `379R` = c(72L, 37520L 
    ), `388G` = c(157L, 70052L), `388R` = c(349L, 134572L), `400G` = c(195L, 
    61048L), `400R` = c(357L, 166711L), `402G` = c(394L, 122754L 
    ), `402R` = c(475L, 115147L), `46G` = c(268L, 76757L), `46R` = c(229L, 
    101414L), `48G` = c(141L, 74028L), `48R` = c(208L, 95794L 
    ), `55G` = c(295L, 124053L), `55R` = c(223L, 88177L), `57G` = c(331L, 
    102180L), `57R` = c(315L, 97874L), `60G` = c(426L, 152972L 
    ), `60R` = c(359L, 99306L), `68G` = c(338L, 176958L), `68R` = c(323L, 
    94942L), `70G` = c(209L, 63565L), `70R` = c(157L, 70904L), 
    `73G` = c(385L, 153715L), `73R` = c(292L, 175287L), `77G` = c(453L, 
    193342L), `77R` = c(296L, 117021L), `82G` = c(485L, 123849L 
    ), `82R` = c(374L, 201931L), `93G` = c(603L, 183288L), `93R` = c(543L, 
    256014L), `94G` = c(233L, 74963L), `94R` = c(366L, 96655L 
    )), .Names = c("100G", "100R", "106G", "106R", "122G", "122R", 
"124G", "124R", "126G", "126R", "134G", "134R", "141G", "141R", 
"167G", "167R", "185G", "185R", "192G", "192R", "235G", "235R", 
"239G", "239R", "240G", "240R", "243G", "243R", "246G", "246R", 
"261G", "261R", "267G", "267R", "26G", "26R", "270G", "270R", 
"279G", "279R", "299G", "299R", "301G", "301R", "305G", "305R", 
"335G", "335R", "342G", "342R", "350G", "350R", "356G", "356R", 
"35G", "35R", "361G", "361R", "366G", "366R", "367G", "367R", 
"377G", "377R", "379G", "379R", "388G", "388R", "400G", "400R", 
"402G", "402R", "46G", "46R", "48G", "48R", "55G", "55R", "57G", 
"57R", "60G", "60R", "68G", "68R", "70G", "70R", "73G", "73R", 
"77G", "77R", "82G", "82R", "93G", "93R", "94G", "94R"), row.names = c("hsa-let-7a-3p", 
"hsa-let-7a-5p"), class = "data.frame") 
+0

'mature2 [rowSums çalışabilir (mature2 == 0)> = Ncol (mature2)/2, ] – nicola

+1

'df [rowMeans (df == 0) == 0.5,]' tam olarak% 50 istiyorsanız. '> =% 50 veya daha fazla için 0,5'. –

+0

% 50 yerine – user2300940

cevap

1

için

mature2[!(apply(mature2, 1, function(y) sum(y == 0)/ncol(mature2)) < 0.5),] 
+0

Bu işe yarıyor. Teşekkürler – user2300940

+0

@ user2300940. Sütun sayısına bölünmeyi unuttum. Düzenlenen sürüme bakın. – lmo

İlgili konular