提取符合条件

时间:2015-05-21 13:21:23

标签: r

我想知道如何提取遵循标准的最后一行。我已经看到了通过函数获得第一个的解决方案"复制"在下一个链接How do I select the first row in an R data frame that meets certain criteria?中。

然而,是否可以获得符合标准的第二行或最后一行?

我想为每个Class创建一个循环(这里我只放两个)并选择符合标准Weight >= 10的第一行,第二行和最后一行。并且如果没有符合获得NA的标准的行。

最后,我想将三个值(第一行,第二行和最后一行)存储在包含每个类的值的列表中。

   Class Weight
1      A     20
2      A     15
3      B     10
4      B     23
5      A     11
6      B     12
7      B     11
8      A     25
9      A      7
10     B      3

1 个答案:

答案 0 :(得分:5)

数据表可以帮助解决这个问题。 这是对Davids评论的编辑,将其转移到答案中,因为他的方法是正确的方法。

library(data.table)
DT <- as.data.table(db)
DT[Weight >= 10][, .SD[c(1, 2, .N)], by = Class]

同样来自大卫的更快的替代方案

 indx <- DT[Weight >= 10][, .I[c(1, 2, .N)], by = Class]$V1 ; DT[indx]

使用.I创建所需索引,然后根据这些行创建子集DT。