我想知道如何提取遵循标准的最后一行。我已经看到了通过函数获得第一个的解决方案"复制"在下一个链接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
答案 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。