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