[英]Calculate difference in different columns between rows by group
我有關於工作站每天工作的數據,我需要找到一個工人在他離開工作日的同一工作站開始工作多少天。 每次觀察是每個工人一天的工作時間。
worker.id | start.station | end.station | day
1 | 234 | 342 | 2015-01-02
1 | 342 | 425 | 2015-01-03
1 | 235 | 621 | 2015-01-04
2 | 155 | 732 | 2015-01-02
2 | 318 | 632 | 2015-01-03
2 | 632 | 422 | 2015-01-04
因此,理想的結果將是生成一個變量(相同),該變量標識工人離開前一天在同一工作站開始工作的天數(每位工人首次觀察時為NA
或FALSE
)。
worker.id | start.station | end.station | day | same
1 | 234 | 342 | 2015-01-02 | FALSE
1 | 342 | 425 | 2015-01-03 | TRUE
1 | 235 | 621 | 2015-01-04 | FALSE
2 | 155 | 732 | 2015-01-02 | FALSE
2 | 318 | 632 | 2015-01-03 | FALSE
2 | 632 | 422 | 2015-01-04 | TRUE
我認為使用dplyr
東西會起作用,但不確定是什么。
謝謝!
worker.id<-c(1,1,1,2,2,2)
start.station<-c(234,342,235,155,218,632)
end.station<-c(342,425,621,732,632,422)
end.station<-c(342,425,621,732,632,422)
day<-c("2015-01-02"," 2015-01-03"," 2015-01-04"," 2015-01-02"," 2015-01-03"," 2015-01-04")
df<-data.frame(worker.id, start.station ,end.station, day)
worker.id start.station end.station day
1 1 234 342 2015-01-02
2 1 342 425 2015-01-03
3 1 235 621 2015-01-04
4 2 155 732 2015-01-02
5 2 218 632 2015-01-03
6 2 632 422 2015-01-04
df$same<-ifelse(df$start.station!=lag(df$end.station) |
df$day=="2015-01-02", "FALSE","TRUE")
worker.id start.station end.station day same
1 1 234 342 2015-01-02 FALSE
2 1 342 425 2015-01-03 TRUE
3 1 235 621 2015-01-04 FALSE
4 2 155 732 2015-01-02 FALSE
5 2 218 632 2015-01-03 FALSE
6 2 632 422 2015-01-04 TRUE
如果要按工作人員ID分組但使用ifelse(笨重),請按照以下注釋中的建議進行操作:
df <-df %>%
group_by(worker.id) %>%
mutate(same=ifelse(start.station!=lag(end.station) &
start.station!=NA, "FALSE","TRUE")) %>%
mutate(same=ifelse(is.na(same), "FALSE","TRUE"))
as.data.frame(df)
worker.id start.station end.station day same
1 1 234 342 2015-01-02 FALSE
2 1 342 425 2015-01-03 TRUE
3 1 235 621 2015-01-04 FALSE
4 2 155 732 2015-01-02 FALSE
5 2 218 632 2015-01-03 FALSE
6 2 632 422 2015-01-04 TRUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.