簡體   English   中英

按組計算行之間不同列的差異

[英]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

因此,理想的結果將是生成一個變量(相同),該變量標識工人離開前一天在同一工作站開始工作的天數(每位工人首次觀察時為NAFALSE )。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM