从数据框中弹出 observation/row
Pop out observation/row from a data frame
我的数据是这样的:
library(tidyverse)
set.seed(1)
df <- tibble(
id = c("cat", "cat", "mouse", "dog", "fish", "fish", "fish"),
value = rnorm(7, 100, sd = 50)
)
我如何 "pop out" fish
的最高值,如将鱼移至新数据框并同时将其从当前数据框中删除?
这有效(但似乎并不那么优雅):
df_store <- df %>%
filter(id == "fish") %>%
top_n(1)
df <- anti_join(df, df_store)
有没有更好的方法?
您可以使用包 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
方面的专家,所以您可以查看 here,管道中的这种赋值实际上是如何工作的。
请注意:在使用 top_n
时,我建议指定值列,默认情况下它是最后一列,但您很容易忘记它:top_n(1, value)
我的数据是这样的:
library(tidyverse)
set.seed(1)
df <- tibble(
id = c("cat", "cat", "mouse", "dog", "fish", "fish", "fish"),
value = rnorm(7, 100, sd = 50)
)
我如何 "pop out" fish
的最高值,如将鱼移至新数据框并同时将其从当前数据框中删除?
这有效(但似乎并不那么优雅):
df_store <- df %>%
filter(id == "fish") %>%
top_n(1)
df <- anti_join(df, df_store)
有没有更好的方法?
您可以使用包 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
方面的专家,所以您可以查看 here,管道中的这种赋值实际上是如何工作的。
请注意:在使用 top_n
时,我建议指定值列,默认情况下它是最后一列,但您很容易忘记它:top_n(1, value)