데이터 프레임 내의 그룹으로 특정 패턴을 찾으려고합니다. 이메일, 주문을 한 사람 및 금액을 기준으로 다음과 같은 주문 데이터 프레임을 가져옵니다.dplyr의 시계열 그룹화 및 필터링
set.seed(123)
dates = sample(seq(as.Date("2017-01-01"),as.Date("2017-12-31"), by = 'day'), 2000, replace = TRUE)
amount <- sample(-50:100, 2000, replace = TRUE)
placedorder <- sample(c(NA, NA, NA, "jeff", "alex", "steve", "amy", "john", "larry", "ryan"), 2000, replace = TRUE)
email <- sample(paste0(1:200, "@gmail.com"), 2000, replace = TRUE)
df <- data.frame(dates, email, placedorder, amount, stringsAsFactors = FALSE)
나는 그들이 날짜 연속적으로 발생하는 이메일이 모든 세 가지가 발생 주소,
및에 의해 그룹
찾고 싶은 :
- 명령서가 긍정적로 배치되었다 값이고
placedorder
이 NA 인 경우 - 음수가 인 wh 위의 단계와 wh 감수
placedorder
는 순서가 긍정적 값을, 단계 2 이후에 배치되었다 - 를 NA
placeholder
는 하지
예 NA이다 :
# A tibble: 10 x 4
# Groups: email [1]
dates email placedorder amount
<date> <chr> <chr> <int>
1 2017-02-10 [email protected] <NA> 68 # satisfies #1
2 2017-02-27 [email protected] <NA> -21 # satisfies #2
3 2017-03-07 [email protected] jeff -9
4 2017-03-09 [email protected] steve -93
5 2017-03-14 [email protected] steve 22 # satisfies #3
6 2017-03-18 [email protected] steve -81
7 2017-04-28 [email protected] <NA> -12
8 2017-05-06 [email protected] <NA> 4
9 2017-06-03 [email protected] jeff -40
10 2017-06-03 [email protected] larry 13 #(this also satisfies #3)
상기 예 모두 email
내에 있으며, 3 개의 필터 각각은 시간에 대해 차례대로 발생합니다.
제 생각에는 이러한 시도가 어디에서 발생했는지는 알지만 날짜와 이러한 문제가 연속해서 발생하지는 않습니다. 또한 실제로 이러한 순서로 필터링하면 가장 좋을 것입니다.
df2 <- df %>%
group_by(email) %>%
filter(any(is.na(placedorder) & amount > 0),
any(is.na(placedorder) & amount < 0),
any(!is.na(placedorder) & amount > 0)
)
미리 감사드립니다. "첫 번째 순서"와 "두 번째 순서"의 나의 해석을 가정
는
몇 가지 질문이 있습니다. "후"또는 데이터 세트 행 번호와 마찬가지로 말할 때 시간 상 승계에 대해 이야기하고 있습니까? 일시적인 경우 날짜와 전자 메일에 대한 데이터 집합을 먼저 정렬합니다 (계산 시간에 저장하도록 전자 메일 정렬). 둘째, 세 가지 조건이 동시에 충족되도록 필터링하고 싶습니까? 또한 문제가 POSIXct 인 날짜에서 발생하는 경우 필요에 따라 다시 문자로 변환하고 나중에 다시 디버깅하기 쉽습니다 (주석이있는 경우). – Arani
나는 처음 사건 발생 후 날짜에 일어난 것처럼 "애프터"를 의미했습니다.모든 세 조건이 주어진 그룹 내에서 동시에 만족되도록 서로 필터링하고 싶습니다. 그리고 서로 후에 발생하는 날짜에 발생합니다 (날짜 사이의 거리가 될 수 있음). –
편집 된 게시물이 예 –