Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 提取满足条件的第一行、第二行和最后一行_R - Fatal编程技术网

R 提取满足条件的第一行、第二行和最后一行

R 提取满足条件的第一行、第二行和最后一行,r,R,我想知道如何提取符合条件的最后一行。我在下一个链接中看到了通过函数“duplicate”获取第一个的解决方案 但是,是否有可能获得满足标准的第二行或最后一行 我想为每个类创建一个循环(这里我只放了两个),并选择满足标准权重>=10的第一行、第二行和最后一行。如果没有符合获得NA标准的行 最后,我想将这三个值(第一行、第二行和最后一行)存储在一个包含每个类的值的列表中 Class Weight 1 A 20 2 A 15 3 B 10 4

我想知道如何提取符合条件的最后一行。我在下一个链接中看到了通过函数“duplicate”获取第一个的解决方案

但是,是否有可能获得满足标准的第二行或最后一行

我想为每个
类创建一个循环(这里我只放了两个),并选择满足标准
权重>=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

数据表可以帮助实现这一点。 这是对Davids评论的编辑,以将其纳入答案中,因为他的方法是正确的

library(data.table)
DT <- as.data.table(db)
DT[Weight >= 10][, .SD[c(1, 2, .N)], by = Class]
库(data.table)
DT=10][,.SD[c(1,2,N)],by=Class]
作为更快的选择,也从大卫看

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

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

您是否意识到
权重
是字符而不是数字,并且您有一个
矩阵而不是
数据.frame
?只是一个旁注:要获得每组的最后一个条目,您可以使用
重复(…,fromLast=TRUE)
对不起,重量是数据框中的数字。您在此处没有指定任何条件,您应该使用
by
而不是根据每个类手动执行此操作。正确的解决方案是
dt[Weight>=10][,Weight[c(1,2,N)],by=Class]
,但它只获取关于类和权重的信息。如果我有更多的列,函数将不会显示其余的列。我已经做了证明。如果有更多的列,你知道如何保存所有列的信息吗?然后尝试
dt[Weight>=10][,.SD[c(1,2,N)],by=Class]
@DavidArenburg我回答得过早,因为你的所有标准都没有达到。看看Davids的最后一个解决方案,这是正确的答案。没关系,你也可以添加
indx=10][,.I[c(1,2,N)],by=Class]$V1;dt[indx]
作为更快解决方案的替代方案,因为
.SD
非常慢。