R Фильтр фрейма данных по ID категории для нескольких логических условий - PullRequest
2 голосов
/ 13 апреля 2020

Я пытаюсь отфильтровать фрейм данных, который использует индекс столбца (называемый Insider CIK). Я хотел бы использовать логический тест для исключения номеров CIK, в которых нет ни P-покупки, ни S-продажи, ни M-Exempt в таблице. Каждая строка - это отдельная транзакция, идентифицируемая соответствующим номером CIK, и некоторые из них могут быть P-покупками или S-продажами, поэтому, если для данного номера CIK, если они являются журналами транзакций, являются исключительно одним типом, я бы хотел их отбросить. Я пробовал функцию фильтра dplyr, но, как я это делаю, он рассматривает только каждую строку и отвечает ли она условию, а не группе (номер CIK) в целом.

Вот мой пример сценария и dput:

test8 <- test7 %>% group_by(`Insider CIK`) %>% filter(`Transaction Type`=='P-Purchase' & `Transaction Type`=='S-Sale' | `Transaction Type`=='M-Exempt')

dput(head(test7[c('Insider CIK', 'Transaction Type')], 100))
structure(list(`Insider CIK` = c("0001027035", "0001027035", 
"0001027035", "0001027035", "0001027035", "0001027035", "0001032553", 
"0001032553", "0001032553", "0001032553", "0001032553", "0001032553", 
"0001032553", "0001032553", "0001032553", "0001032553", "0001032553", 
"0001032553", "0001032553", "0001032553", "0001032553", "0001032553", 
"0001032553", "0001032553", "0001032553", "0001032553", "0001032553", 
"0001032553", "0001032553", "0001032553", "0001032553", "0001032553", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331", "0001033331", "0001033331", 
"0001033331", "0001033331", "0001033331"), `Transaction Type` = c("S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "M-Exempt", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "M-Exempt", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "M-Exempt", 
"S-Sale", "M-Exempt", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "S-Sale", "M-Exempt", "S-Sale", 
"M-Exempt", "S-Sale", "S-Sale", "S-Sale", "M-Exempt", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale", "M-Exempt", "S-Sale", "S-Sale", 
"M-Exempt", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"M-Exempt", "S-Sale", "S-Sale", "S-Sale", "S-Sale", "S-Sale", 
"S-Sale", "S-Sale", "S-Sale")), row.names = 2:101, class = "data.frame")

Я ценю помощь.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Вот вариант с data.table

library(data.table)
setDT(test7)[, .SD[any(`Transaction Type`=='P-Purchase') & 
    (any(`Transaction Type`=='S-Sale' | `Transaction Type`=='M-Exempt')],  by = `Insider CIK`]
0 голосов
/ 13 апреля 2020

Мы можем проверить условие и использовать any, чтобы получить всю группу:

library(dplyr)

test7 %>% 
  group_by(`Insider CIK`) %>% 
  filter(any(`Transaction Type`=='P-Purchase') & 
        (any(`Transaction Type`=='S-Sale' | `Transaction Type`=='M-Exempt')))
...