R 从数据框中弹出观察值/行

R 从数据框中弹出观察值/行,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我的数据如下所示: library(tidyverse) set.seed(1) df <- tibble( id = c("cat", "cat", "mouse", "dog", "fish", "fish", "fish"), value = rnorm(7, 100, sd = 50) ) 有更好的方法吗?您可以使用软件包pipeR在一行中完成这两个操作 library(pipeR); library(dplyr) df <- df %>>%

我的数据如下所示:

library(tidyverse)

set.seed(1)
df <- tibble(
    id = c("cat", "cat", "mouse", "dog", "fish", "fish", "fish"),
    value = rnorm(7, 100, sd = 50)
)

有更好的方法吗?

您可以使用软件包
pipeR
在一行中完成这两个操作

library(pipeR); library(dplyr)
df <- df %>>% filter(id == "fish") %>>% top_n(1) %>>% (~ df2) %>% anti_join(df, .)
print(df2)
#### 1  fish 124.3715
print(df)
#### 1 mouse  58.21857
#### 2   dog 179.76404
#### 3  fish  58.97658
#### 4   cat  68.67731
#### 5   cat 109.18217
#### 6  fish 116.47539
库(pipeR);图书馆(dplyr)
df>%fish过滤器(id==“fish”)%%>>%top\u n(1)%%>>%(~df2)%%>%anti\u-join(df,.)
打印(df2)
####1鱼124.3715
打印(df)
####1只老鼠58.21857
####2只狗179.76404
####3鱼58.97658
####4类68.67731
####5第109.18217类
####6鱼116.47539
我不是吹笛手的专家,所以你可以看看,管道中的这种分配实际上是如何工作的


只需一句话:当使用
top\n
时,我建议指定值列,默认情况下它是最后一列,但您很容易忘记它:
top\n(1,value)

fyi,在基数R中,您可以使用
split
创建
数据的
列表。使用
split(df,with(df,id=“fish”创建框架
s&value==max(value[id==fish])
library(pipeR); library(dplyr)
df <- df %>>% filter(id == "fish") %>>% top_n(1) %>>% (~ df2) %>% anti_join(df, .)
print(df2)
#### 1  fish 124.3715
print(df)
#### 1 mouse  58.21857
#### 2   dog 179.76404
#### 3  fish  58.97658
#### 4   cat  68.67731
#### 5   cat 109.18217
#### 6  fish 116.47539