如果至少有 3 个有效值,则保留行

Sha*_*ver 0 r

我想根据有效值的数量对数据框进行子集化。我想只保留至少有 3 个有效值的行。我试图找到这样的主题(我很确定有一个),但我没有找到。今天的大脑功能非常低下。

> dput(aa)
structure(list(Names = c("A11DS1", "DDSAI2", "ADDA1", 
                           "TT0FGR8", "TRASD1", "DDAWT0", "YYRRP1", "GFSAX5", "123US2", "FXCH1", 
                           "A3KN83", "A4D1P6", "A5YKK6", "ASDASC98", "ASDASDG6", "A6NFQ2", "GFDAHQ2", 
                           "A6NHR9", "A6NIH7", "P62308"), `116_1` = c(0, 849990000, 
                                                                          1281200000, 1.198e+09, 68748000, 0, 0, 0, 61641000, 43582000, 
                                                                          19723000, 40042000, 428120000, 152520000, 168380000, 0, 228920000, 
                                                                          792460000, 0, 453570000), `116_2` = c(0, 926040000, 1500800000, 
                                                                                                                    1242700000, 48212000, 0, 47242000, 46062000, 30757000, 53163000, 
                                                                                                                    0, 52400000, 463870000, 99146000, 150810000, 31183000, 0, 1.079e+09, 
                                                                                                                    43208000, 421410000), `116_3` = c(742270000, 734460000, 1377700000, 
                                                                                                                                                          1390500000, 52647000, 59797000, 0, 0, 0, 39395000, 0, 43433000, 
                                                                                                                                                          373510000, 143300000, 185970000, 19743000, 0, 931530000, 0, 869800000
                                                                                                                    ), `116_4` = c(0, 553380000, 1478900000, 1368400000, 43087000, 
                                                                                                                                       45608000, 0, 0, 56578000, 38108000, 0, 40301000, 419570000, 153200000, 
                                                                                                                                       174780000, 0, 0, 1064100000, 0, 643450000)), row.names = c(1L, 
                                                                                                                                                                                                  3L, 6L, 7L, 8L, 10L, 12L, 13L, 14L, 15L, 16L, 17L, 19L, 20L, 
                                                                                                                                                                                                  23L, 25L, 28L, 29L, 30L, 33L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

查看提供的要删除的数据行:1L;10-13升;16升、25升、28升、30升。

Ron*_*hah 6

我们可以用它rowSums 来执行这个任务。假设有效值的意思是不等于 0,你可以这样做 -

aa[rowSums(aa[-1] != 0, na.rm = TRUE) >= 3, ]

#      Names      116_1      116_2      116_3      116_4
#3    DDSAI2  849990000  926040000  734460000  553380000
#6     ADDA1 1281200000 1500800000 1377700000 1478900000
#7   TT0FGR8 1198000000 1242700000 1390500000 1368400000
#8    TRASD1   68748000   48212000   52647000   43087000
#14   123US2   61641000   30757000          0   56578000
#15    FXCH1   43582000   53163000   39395000   38108000
#17   A4D1P6   40042000   52400000   43433000   40301000
#19   A5YKK6  428120000  463870000  373510000  419570000
#20 ASDASC98  152520000   99146000  143300000  153200000
#23 ASDASDG6  168380000  150810000  185970000  174780000
#29   A6NHR9  792460000 1079000000  931530000 1064100000
#33   P62308  453570000  421410000  869800000  643450000
Run Code Online (Sandbox Code Playgroud)