Группа фильтров для условного только одного значения в другом поле - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь выполнить окончательный фильтр для data.frame, чтобы исключить группы, которые в данном случае являются номерами «Insider CIK» теми, где «Тип транзакции», связанный с этой группой, является исключительно одним из трех вариантов: «P-Покупка», «S-Sale», «M-Exempt». Комбинации этих значений для группы Я хочу сохранить только тот случай, когда они все одинаковы. Вторая часть для фильтрации только одной записи по группам работает по мере необходимости.

Вот мой скрипт и dput:

test12 <- test12 %>% group_by(`Insider CIK`) %>% filter(all(c("P-Purchase", "S-Sale", "M-Exempt") %in% `Transaction Type`) | n()>1)


structure(list(`Insider CIK` = c("0001418814", "0001418814", 
"0001418814"), `Insider Full Name and CIK` = c("ValueAct Holdings, L.P. (0001418814)", 
"ValueAct Holdings, L.P. (0001418814)", "ValueAct Holdings, L.P. (0001418814)"
), `Acquistion or Disposition` = structure(c(1L, 1L, 1L), .Label = c("A", 
"D", "-"), class = "factor"), `Transaction Date` = structure(c(18334, 
18333, 18332), class = "Date"), `Deemed Execution Date` = structure(c(1L, 
1L, 1L), .Label = "Â", class = "factor"), Issuer = c("HAWAIIAN ELECTRIC INDUSTRIES INC", 
"HAWAIIAN ELECTRIC INDUSTRIES INC", "HAWAIIAN ELECTRIC INDUSTRIES INC"
), Form = structure(c(1L, 1L, 1L), .Label = c("4", "3"), class = "factor"), 
    `Transaction Type` = c("P-Purchase", "P-Purchase", "P-Purchase"
    ), `Direct or Indirect Ownership` = structure(c(2L, 2L, 2L
    ), .Label = c("--D", "--I"), class = "factor"), `Number of Securities Transacted` = c(542252, 
    400060, 755600), `Issuer CIK` = structure(c(4L, 4L, 4L), .Label = c("0000750574", 
    "0000007431", "0000100726", "0000354707", "0000885590", "0001101215", 
    "0001137789", "0001655075", "0001739445", "0001512499", "0000874761", 
    "0001140536", "0001308161", "0001099800", "0001280776", "0001314102", 
    "0001389072", "0001642545"), class = "factor"), `Security Name` = structure(c(3L, 
    3L, 3L), .Label = c("common stock", "Common Shares, no par value", 
    "Common Stock", "Forward Purchase Contract", "Ordinary Shares", 
    "Physically Settled Forwards", "Series A Non-Voting Convertible Preferred Stock", 
    "Class A Common Stock", "Class B Common Stock", "Deferred Stock Units", 
    "Forward purchase contract", "Ordinary Shares, nominal value $0.000304635", 
    "Ordinary Shares, nominal value $0.000304635 per share", 
    "Units", "Employee Stock Option (Right to Acquire)", "Performance Rights", 
    "Common stock", "Employee Stock Option (right to buy)", "Restricted Stock Unit", 
    "Restricted Stock Units", "Senior Convertible Preferred Stock", 
    "Stock Option (right to buy)", "Stock Option (Right to Buy)", 
    "Stock Options (Right to Buy)"), class = "factor"), `Days Since Most Recent Filing` = structure(c(0, 
    1, 2), class = "difftime", units = "days"), firstTransactionDate = structure(c(18334, 
    18334, 18334), class = "Date")), row.names = c(NA, -3L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), groups = structure(list(`Insider CIK` = "0001418814", 
    .rows = list(1:3)), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame")))

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 апреля 2020

Нам не нужно условие n() == 1, поскольку нет шансов иметь более одного Transaction Type на строку

library(dplyr)
test12 %>% 
      group_by(`Insider CIK`) %>%
      filter(all(c("P-Purchase", "S-Sale", "M-Exempt") %in% `Transaction Type`))

Или, если бы ОП хотел n() == 1, это было бы |

test12 %>% 
      group_by(`Insider CIK`) %>%
      filter(all(c("P-Purchase", "S-Sale", "M-Exempt") %in% `Transaction Type`) |n() == 1)
...