创建一组行并从这些行中选择最后一组

时间:2018-09-20 08:17:33

标签: r

创建一组行并从这些行中选择最后一个组。

下面总共有25行-我想创建5个组-每个组将有5行,在完成分组后,我只选择最后一个组。

我不想使用切片或索引,因为它会是静态的,它应该自动选择最后一个组。

A           B           C 

0           0           0
0           0           0
0           0           0
0           0           0
0.000342936 0           0
0.002743484 0           0.000355999
0.009259259 0           0.002847989
0.021947874 0.000342936 0.009611962
0.042866941 0.002743484 0.022783909
0.074074074 0.009259259 0.044499822
0.117626886 0.021947874 0.076895692
0.17558299  0.042866941 0.122107512
0.25        0.074074074 0.182271271
0.342935528 0.117626886 0.259522962
0.456447188 0.17558299  0.355998576
0.592592593 0.25        0.473834105
0.753429355 0.342935528 0.615165539
0.941015089 0.456447188 0.782128871
1.157407407 0.592592593 0.976860093
1.404189089 0.752980901 1.201011401
1.681043579 0.937427456 1.454299824
1.987179487 1.145299145 1.735958595
2.321805424 1.375962857 2.045220947
2.684129999 1.628785481 2.381320116
3.073361823 1.903133903 2.743489334

预期输出:

以上25行中的最后5行。

     A           B           C
1.681043579 0.937427456 1.454299824
1.987179487 1.145299145 1.735958595
2.321805424 1.375962857 2.045220947
2.684129999 1.628785481 2.381320116
3.073361823 1.903133903 2.743489334

请帮助,在此先感谢。

2 个答案:

答案 0 :(得分:2)

我们可以使用tail

no_of_groups <- 5
tail(df, nrow(df)/no_of_groups)

#          A         B        C
#21 1.681044 0.9374275 1.454300
#22 1.987179 1.1452991 1.735959
#23 2.321805 1.3759629 2.045221
#24 2.684130 1.6287855 2.381320
#25 3.073362 1.9031339 2.743489

如果行数不能被floor整除,我们可以将其包装在no_of_groups

#Removing one row
df <- df[-1, ]

tail(df, floor(nrow(df)/no_of_groups))

#      A        B        C
#1.987179 1.145299 1.735959
#2.321805 1.375963 2.045221
#2.684130 1.628785 2.381320
#3.073362 1.903134 2.743489

这将仅返回最后一组中的最后4行。

答案 1 :(得分:0)

也许是这个吗?

 q=read_table("                  A           B           C 
              0           0           0
              0           0           0
              0           0           0
              0           0           0
              0.000342936 0           0
              0.002743484 0           0.000355999
              0.009259259 0           0.002847989
              0.021947874 0.000342936 0.009611962
              0.042866941 0.002743484 0.022783909
              0.074074074 0.009259259 0.044499822
              0.117626886 0.021947874 0.076895692
              0.17558299  0.042866941 0.122107512
              0.25        0.074074074 0.182271271
              0.342935528 0.117626886 0.259522962
              0.456447188 0.17558299  0.355998576
              0.592592593 0.25        0.473834105
              0.753429355 0.342935528 0.615165539
              0.941015089 0.456447188 0.782128871
              1.157407407 0.592592593 0.976860093
              1.404189089 0.752980901 1.201011401
              1.681043579 0.937427456 1.454299824
              1.987179487 1.145299145 1.735958595
              2.321805424 1.375962857 2.045220947
              2.684129999 1.628785481 2.381320116
              3.073361823 1.903133903 2.743489334")


 q%>%
   mutate(num=ceiling(row_number()/5))%>%
   filter(num==max(num))%>%
   select(-num)
# A tibble: 5 x 3
      A     B     C
  <dbl> <dbl> <dbl>
1  1.68 0.937  1.45
2  1.99 1.15   1.74
3  2.32 1.38   2.05
4  2.68 1.63   2.38
5  3.07 1.90   2.74