Truncating a dataframe according to count of vector elements

前端 未结 2 1817
小鲜肉
小鲜肉 2021-01-25 08:27

I have a dataframe df, containing three vectors:

subject  condition  value
01       A          12
01       A          6
01       B          10
01            


        
相关标签:
2条回答
  • 2021-01-25 08:50

    For each subject/condition pair create a sequence number seq for its rows and then only keep those rows whose sequence number is less than 3.

    subset(transform(DF, seq = ave(value, subject, condition, FUN = seq_along)), seq < 3)
    

    giving:

      subject condition value seq
    1      01         A    12   1
    2      01         A     6   2
    3      01         B    10   1
    4      01         B     2   2
    5      02         A     5   1
    6      02         A    11   2
    7      02         B     3   1
    8      02         B     5   2
    

    Note

    The input in reprodudible form is assumed to be:

    Lines <- "subject  condition  value
    01       A          12
    01       A          6
    01       B          10
    01       B          2
    02       A          5
    02       A          11
    02       B          3
    02       B          5
    02       B          9"
    DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE,
      colClasses = c("character", "character", "numeric"))
    
    0 讨论(0)
  • 2021-01-25 08:58

    Here's a dplyr solution -

    df %>%
      group_by(subject, condition) %>%
      filter(row_number() < 3) %>%
      ungroup()
    
    # A tibble: 8 x 3
      subject condition value
      <chr>   <chr>     <dbl>
    1 01      A            12
    2 01      A             6
    3 01      B            10
    4 01      B             2
    5 02      A             5
    6 02      A            11
    7 02      B             3
    8 02      B             5
    
    0 讨论(0)
提交回复
热议问题