Как убрать последнюю строку в каждой group_by? - PullRequest
1 голос
/ 07 апреля 2019

У меня есть фрейм данных, и я хотел бы удалить последнюю строку для каждого имени.Кто-нибудь может сказать мне, как это сделать?Заранее спасибо.

df <- data.frame(c(500,200,100,600,300,400),c(100,50,2,70,60,90),c("A","A","A","B","C","C"))
colnames(df) <- c("income","tax","name")
#> df
  income tax name
1    500 100    A
2    200  50    A
3    100   2    A
4    600  70    B
5    300  60    C
6    400  90    C
#I have tried like this but I will lost the information about B
library(dplyr)
df$row <- rownames(df)
df2 <- df %>%
  group_by(name) %>%
  filter(row != max(row))
#ideal result should be
  income tax name
     500 100    A
     200  50    A
     600  70    B
     300  60    C

1 Ответ

1 голос
/ 07 апреля 2019

После группировки по 'name' slice, чтобы удалить последнюю строку (-n()) `, если количество строк больше 1, или же сохранить полные строки

df %>% 
  group_by(name) %>% 
  slice(if(n() > 1)-n() else row_number())
# A tibble: 4 x 3
# Groups:   name [3]
#  income   tax name 
#   <dbl> <dbl> <fct>
#1    500   100 A    
#2    200    50 A    
#3    600    70 B    
#4    300    60 C    

Или используйте ИЛИ (|) в filter

df %>% 
   group_by(name) %>%
   filter(n() == 1 | row_number() < n())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...