удалить идентификаторы с одним значением переменной, появляющимся один раз - PullRequest
0 голосов
/ 08 февраля 2020

Надеюсь, я смогу четко объяснить.

У меня есть такой набор данных

dataset <- data.frame(ID = c(1,1,1,2,2,2,3,3,3), 
                      Invoice = c(1,2,3,1,2,3,1,2,3), 
                      Invoice_Date = c('09/30/2019','10/30/2019','11/30/2019',
                                       '10/31/2019','11/30/2019','12/31/2019',
                                       '7/31/2019','9/30/2019','12/31/2019'),
                      paid_unpaid = c('no','yes','yes','yes','no','no','no','yes','no'), 
                      stringsAsFactors = FALSE)
dataset$Invoice_Date <- as.Date(dataset$Invoice_Date, '%m/%d/%y')  
ID. Invoice. Date of Invoice.  paid or not.  
1    1         09/30/2019       no
1    2         10/30/2019       yes
1    3         11/30/2019       yes

2    1         10/31/2019       yes
2    2         11/30/2019       no
2    3         12/31/2019       no

3    1         7/31/2019        no
3    2         9/30/2019        yes
3    3         12/31/2019       no

Я хочу выбрать клиентов, у которых более одного неоплаченного счета. Таким образом, частота нет в переменной «платный или нет» появляется более одного раза.

после выбора мои идеальные данные выглядят следующим образом: $ Invoice_Date <- as.Date (набор данных $ Invoice_Date, '% m /% d /% y') </p>


    ID. Invoice. Date of Invoice.  paid or not.  

    2    1         10/31/2019       yes
    2    2         11/30/2019       no
    2    3         12/31/2019       no

    3    1         7/31/2019        no
    3    2         9/30/2019        yes
    3    3         12/31/2019       no

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Вы можете сделать:

library(dplyr)

dataset %>%
  group_by(ID) %>%
  filter(sum(paid_unpaid == 'no') > 1)

Вывод:

# A tibble: 6 x 4
# Groups:   ID [2]
     ID Invoice Invoice_Date paid_unpaid
  <dbl>   <dbl> <date>       <chr>      
1     2       1 2020-10-31   yes        
2     2       2 2020-11-30   no         
3     2       3 2020-12-31   no         
4     3       1 2020-07-31   no         
5     3       2 2020-09-30   yes        
6     3       3 2020-12-31   no    
0 голосов
/ 08 февраля 2020

Мы можем использовать subset с table с base R

subset(dataset,  ID %in% names(which(table(ID, paid_unpaid == 'no')[, 2]> 1)))
#  ID Invoice Invoice_Date paid_unpaid
#4  2       1   2020-10-31         yes
#5  2       2   2020-11-30          no
#6  2       3   2020-12-31          no
#7  3       1   2020-07-31          no
#8  3       2   2020-09-30         yes
#9  3       3   2020-12-31          no
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...