我想通過抽象最大日期減去最小日期來查找唯一 ID 在此 df 中作業了多少天。
structure(list(id = c("f1", "f2", "f2", "f4", "f5", "f2", "f3",
"f1", "f1", "f3", "f4", "f2", "f2", "f2", "f2"),
date = structure(c(18687, 18687, 18687, 18687, 18687,
18687, 18687, 18687, 18687, 18687, 18687, 18687, 18687, 18687,
18687), class = "Date")), row.names = c(2L, 4L, 8L, 15L, 17L,
18L, 21L, 25L, 36L, 37L, 38L, 40L, 42L, 48L, 52L), class = "data.frame")
我已經嘗試過了,但我得到了奇怪的數字
df_total_days_per_id<-df %>%
group_by(id) %>%
mutate(xx1 = max(date)-min(date)) %>% #by user find range
group_by(id) %>%
summarise(number_of_days = sum(xx1))
uj5u.com熱心網友回復:
根據您的代碼,我可以估計您獲得“奇怪數字”的原因。
該函式向現有表mutate() 添加一個新列。讓我們暫時忘記組并假設以下日期:
2022-01-01
2022-01-11
2022-01-21
你希望答案是 20,對吧?21 減 1。但是使用您的mutate()函式,您可以創建:
2022-01-01 20 days
2022-01-11 20 days
2022-01-21 20 days
然后在最后一次操作中,將所有這些 20 加起來達到 60 天。顯然這是錯誤的。
而不是使用mutate()我們summarize()像這樣使用:
df %>%
group_by(id) %>%
summarize(number_of_days = max(date)-min(date) 1) #added 1 for correction
在此之后無需添加另一個group_by()或sum()
編輯:
我注意到你說的是作業天數。因此,如果我們采用上面的示例,您可能希望輸出 3 而不是 20,因為中間有幾天被跳過。如果是這種情況,您應該summarize()完全使用不同的功能。
為此,我們可以使用n_distinct()計算組中唯一值數量的函式,如下所示:
df %>%
group_by(id) %>%
summarise(number_of_days = n_distinct(date))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432265.html
上一篇:y軸下方的條形圖出血D3.js
