R语言 检索每个组的“倒数第二个”数据

r6hnlfcb  于 2023-04-18  发布在  其他
关注(0)|答案(3)|浏览(389)

我想检索每个组的“倒数第二”数据。目前,代码如下,使用“group_modify”两次。有没有可用的函数?(如何简化当前代码)?谢谢!

  • 所附图片中红色矩形中的预期结果。*
library(dplyr)

test_data <- data.frame(category=c("a","a","c","a","b","c","a","b","c"),
                        value=c(1.72,0.32,0.22,1.29,-0.49,0.61,1.24,0.58,0.26))

test_data %>%  arrange(category ) %>% 
  group_by(category) %>% 
  group_modify(~tail(.x,2)) %>% 
  group_modify(~head(.x,1))

sqxo8psd

sqxo8psd1#

我们可以使用nth(value, -2),它给出了每个组的倒数第二个:

library(dplyr)

  test_data %>%  
    arrange(category ) %>% 
    group_by(category) %>% 
    summarise(value1 = nth(value, -2))
category value1
  <chr>     <dbl>
1 a          1.29
2 b         -0.49
3 c          0.61
3ks5zfa0

3ks5zfa02#

您可以在每个组中提取n() - 1行。

library(dplyr)

test_data %>% group_by(category) %>% slice(n()-1) %>% ungroup

#  category value
#  <chr>    <dbl>
#1 a         1.29
#2 b        -0.49
#3 c         0.61
njthzxwz

njthzxwz3#

如果一个列表输出是可接受的,那么它就可以工作:

test_data %>% 
  arrange(category) %>% 
  group_split(category) %>% 
  map(. %>% slice(nrow(.)-1))

[[1]]
# A tibble: 1 x 2
  category value
  <chr>    <dbl>
1 a         1.29

[[2]]
# A tibble: 1 x 2
  category value
  <chr>    <dbl>
1 b        -0.49

[[3]]
# A tibble: 1 x 2
  category value
  <chr>    <dbl>
1 c         0.61

相关问题