Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

My first work in databases was in FileMaker Pro. One of the features I really liked was the ability to do a complex search, and then with one call, omit those results and return anything from the original dataset that wasn't returned in the search. Is there a way to do this in R without having to flip all the logic in a search?

Something like:

everything_except <- df %>%
  filter(x == "something complex") %>% 
  omit()

My initial thought was looking into using a join to keep non-matching values, but thought I would see if there's a different way.

Update with example: I'm a little hesitant to add an example because I don't want to solve for just this problem but understand if there is an underlying method for multiple cases.

set.seed(123)
event_df <- tibble(time_sec = c(1:120)) %>% 
  sample_n(100) %>%
  mutate(period = sample(c(1,2,3),
                         size = 100,
                         replace = TRUE),
         event = sample(c("A","B"), 
                        size = 100, 
                        replace = TRUE, 
                        prob = c(0.1,0.9))) %>% 
  select(period, time_sec, event) %>% 
  arrange(period, time_sec)

filter_within_timeframe <- function (.data, condition, time, lead_time = 0, lag_time = 0){
  condition <- enquo(condition)
  time <- enquo(time)
  filtered <- .data %>% slice(., 1:max(which(!!condition))) %>% 
    group_by(., grp = lag(cumsum(!!condition), default = 0)) %>% 
    filter(., (last(!!time) - !!time) <= lead_time & (last(!!time) - 
                                                        !!time) >= lag_time)
  return(filtered)
}

# this returns 23 rows of data. I would like to return everything except this data
event_df %>% filter_within_timeframe(event == "A", time_sec, 10, 0)

# final output should be 77 rows starting with...
# ~period,  ~time_sec,  ~event,
# 1,3,"B",
# 1,4,"B",
# 1,5,"B",

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
370 views
Welcome To Ask or Share your Answers For Others

1 Answer

等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...