在R中删除具有特定条件的行

时间:2020-06-04 02:12:27

标签: r data-wrangling

我的数据框是ABC:

    C1  C2  C3
L1  38  53  63 
L2  9   44  75 
L3  57  57  96 
L4  41  78  3 
L5  81  39  65 
L6  16  19  97 
L7  13  95  65 
L8  44  28  71 
L9  14  66  66 
L10 6   45  90 

我想在C3中保留具有最高五个值的行,并删除其余的行。因此,最终输出应为:

    C1  C2  C3
L6  16  19  97 
L3  57  57  96 
L10 6   45  90 
L2  9   44  75 
L8  44  28  71 

我应该使用if函数吗?

2 个答案:

答案 0 :(得分:3)

您可以使用order

ABC[head(order(-ABC$C3), 5), ]

#    C1 C2 C3
#L6  16 19 97
#L3  57 57 96
#L10  6 45 90
#L2   9 44 75
#L8  44 28 71

dplyr中,您可以使用top_n

library(dplyr)
ABC %>% top_n(5, C3)

或者arrangeslice

ABC %>% arrange(desc(C3)) %>% slice(1:5)

数据

ABC <- structure(list(C1 = c(38L, 9L, 57L, 41L, 81L, 16L, 13L, 44L, 
14L, 6L), C2 = c(53L, 44L, 57L, 78L, 39L, 19L, 95L, 28L, 66L, 
45L), C3 = c(63L, 75L, 96L, 3L, 65L, 97L, 65L, 71L, 66L, 90L)), 
class = "data.frame", row.names = c("L1", "L2", "L3", "L4", "L5", 
"L6", "L7", "L8", "L9", "L10"))

答案 1 :(得分:0)

您也可以在dplyr中使用filter(),例如;

library(dplyr)
data("iris")

# filter sepal.length greater than 1
iris %>%
  group_by(Species) %>%
  filter(Sepal.Length>1)

结果

# A tibble: 150 x 5
# Groups:   Species [3]
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
相关问题