pcd <- data.frame(tripNo = c(618, 618, 610, 610, 610, 619),
procDate = as.Date(c('2016-03-02', '2016-03-03', '2016-03-02', '2016-03-03', '2016-03-02', '2016-03-03')),
delay = c(7.45, 12.90, 11.88, 6.66, 12.50, 9.41))
我想在不同的兩天,其中第二日延遲大於前一天的最後一個短的加工行程標誌不一致。現在我已經做了這種方式:SUBSTR在dplyr%>%變異
pcd %>%
arrange(tripNo, procDate, delay) %>%
group_by(tripNo) %>%
mutate(delayErr = (row_number() != 1) & (delay < lag(delay)),
Alert = ifelse(delayErr, '!', '')) %>%
select(tripNo, procDate, delay, delayErr, Alert)
tripNo procDate delay delayErr Alert
(dbl) (date) (dbl) (lgl) (chr)
1 610 2016-03-02 11.88 FALSE
2 610 2016-03-02 12.50 FALSE
3 610 2016-03-03 6.66 TRUE !
4 618 2016-03-02 7.45 FALSE
5 618 2016-03-03 12.90 FALSE
6 619 2016-03-03 9.41 FALSE
所以這個工程確定,我的問題是關於我的第一次嘗試,在我試圖用SUBSTR:
pcd %>% arrange(tripNo, procDate, delay) %>%
group_by(tripNo) %>%
mutate(delayErr = (row_number() != 1) & (delay < lag(delay)),
Alert = substr(' !', delayErr + 1, delayErr + 1)) %>% # <<< This is the only change
select(tripNo, procDate, delay, delayErr, Alert)
tripNo procDate delay delayErr Alert
(dbl) (date) (dbl) (lgl) (chr)
1 610 2016-03-02 11.88 FALSE
2 610 2016-03-02 12.50 FALSE
3 610 2016-03-03 6.66 TRUE
4 618 2016-03-02 7.45 FALSE
5 618 2016-03-03 12.90 FALSE
6 619 2016-03-03 9.41 FALSE
有了這個代碼,警報不沒有按我的預期顯示。 有人可以向我解釋爲什麼第二個dplyr查詢不起作用?
謝謝!
請原諒我缺乏理解:當然你的答案完美無缺,但在dplyr調用的情況下,爲什麼delayErr是一個向量?是不是隻用當前行的值調用substr? – ap53
@ ap53 data.frame中的每一列都是一個'vector'。我不確定我是否理解你的問題。 – akrun
這兩列之間爲什麼沒有區別? – ap53