Как убрать всю симуляцию с одинаковыми условиями - PullRequest
0 голосов
/ 31 января 2019

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

Simulation  Time    BTC
   1          1     0
   1          2     0
   1          3     0
   2          1    23
   2          2    45
   2          3    55

Я хочу, чтобы R удалил все симуляции, если Time = 1 и BTC = 0.

Ожидаемый результат будет:

Simulation  Time    BTC 
   2          1      23
   2          2      45
   2          3      55

Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Решение Base R с использованием ave

df[!with(df, ave(Time == 1 & BTC == 0, Simulation, FUN = any)), ]

#  Simulation Time BTC
#4          2    1  23
#5          2    2  45
#6          2    3  55

, которое можно перевести на dplyr (аналогично @ Wen-Ben)

library(dplyr)

df %>%
 group_by(Simulation) %>%
 filter(!any(Time == 1 & BTC == 0))

и для полноты data.tableперевод

library(data.table)
setDT(df)[, .SD[!any(Time == 1 & BTC == 0)], by = Simulation]

Другая опция Base R без какой-либо группировки

df[!with(df, Simulation %in% Simulation[Time == 1 & BTC == 0]),]
0 голосов
/ 31 января 2019

Использование dplyr groupby с any

df%>%group_by(Simulation)%>%
      mutate(n=any(Time==1&BTC==0))%>%
      filter(!n)%>%
      select(-n)
# A tibble: 3 x 3
# Groups:   Simulation [1]
  Simulation  Time   BTC
       <int> <int> <int>
1          2     1    23
2          2     2    45
3          2     3    55
...