我在嘗試做一個基于起始日期的天數統計時遇到了一些麻煩。我基本上只想通過產品來計算自起始日期以來的天數。
我認為最好用例子來說明這一點。 這就是我的出發點:
df1 <- data.frame(Dates= seq(as. Date("2021/1/1"), as. 日期("2021/1/15")/span>。 "day"),
產品 = rep(c(rep("Banana"。 5)。 rep("蘋果"。 5)。 rep("Orange"/span>。 5)))
)
日期 產品
1 2021-01-01 香蕉
2 2021-01-02香蕉
3 2021-01-03香蕉
4 2021-01-04香蕉
5 2021-01-05 香蕉
6 2021-01-06 Apple
7 2021-01-07 Apple
8 2021-01-08 Apple
9 2021-01-09 Apple
10 2021-01-10 Apple
11 2021-01-11 Orange
12 2021-01-12 Orange
13 2021-01-13 Orange
14 2021-01-14 Orange
15 2021-01-15 Orange
我目前對每個產品都有幾個測量值,我需要將其繪制成天數而不是日期,我無法進行轉換。
而這就是我想要的:
desired_df <- data.frame(Dates= seq(as. Date("2021/1/1"), as. 日期("2021/1/15")/span>。 "day"),
產品 = rep(c(rep("Banana"。 5)。 rep("蘋果"。 5)。 rep("Orange"/span>。 5))),
天 = rep(seq(0。 4), 3)
)
日期 產品日
1 2021-01-01 Banana 0
2 2021-01-02 Banana 1
3 2021-01-03 Banana 2
4 2021-01-04 Banana 3
5 2021-01-05 Banana 4
6 2021-01-06 Apple 0
7 2021-01-07 Apple 1
8 2021-01-08 Apple 2
9 2021-01-09 Apple 3
10 2021-01-10 Apple 4
11 2021-01-11 Orange 0
12 2021-01-12 Orange 1
13 2021-01-13 Orange 2
14 2021-01-14 Orange 3
15 2021-01-15 Orange 4
到目前為止,我已經嘗試了幾種方法,但沒有一種是有效的。
df2 <- df1 %>%
mutate(Days =Dates -Dates[1])
df3 <- df1 %>%
group_by(Product) %>%
mutate(Days =Dates -Dates[1])
日期 產品日
starter_dates <- df1 %>%
aggregate(by = list(df1$Product)。 FUN = first)
組.1日期產品
1 蘋果 2021-01-06蘋果
2 Banana 2021-01-01 Banana
3 Orange 2021-01-11 Orange
df4 <- df1 %>%
mutate()
天 = case_when(產品 == starter_dates$產品~日期- starter_dates$Dates)
)
但都沒有產生我想要的結果。我怎樣才能計算出從第一次出現到現在的天數呢?
編輯:
這是我從建議的答案中得到的結果:
這是我從建議的答案中得到的結果。
> df1 %> % group_by(Product) %> % mutate(Days = as. numeric(Dates -Dates[1]))
# A tibble: 15 x 3
# 組。 產品[3]
日期 產品日
<日期> < chr> <dbl>/span>
1 2021-01-01 Banana 0
2 2021-01-02 Banana 1
3 2021-01-03 Banana 2
4 2021-01-04 Banana 3
5 2021-01-05 Banana 4
6 2021-01-06 Apple 5
7 2021-01-07 Apple 6
8 2021-01-08 Apple 7
9 2021-01-09 Apple 8
10 2021-01-10 Apple 9
11 2021-01-11 Orange 10
12 2021-01-12 Orange 11
13 2021-01-13 Orange 12
14 2021-01-14 Orange 13
15 2021-01-15 Orange 14
確保沒有來自其他軟體包的沖突,下面的內容現在可以使用了。
df1 %>% group_by(Product) %>%
mutate(Days=lubridate:: 日(日期)-先(lubridate。 :日(日期)))
uj5u.com熱心網友回復:
我們可以從第一個"Date "值中減去每一行的 "Date":
df1 %>% group_by(Product) %>%
mutate(Days=lubridate:: 日(日期)-先(lubridate。 :日(日期)))
# A tibble: 15 x 3
# 組。 產品[3]
日期 產品日
<日期> < chr> <int>/span>
1 2021-01-01 Banana 0
2 2021-01-02 Banana 1
3 2021-01-03 Banana 2
4 2021-01-04 Banana 3
5 2021-01-05 Banana 4
6 2021-01-06 Apple 0
7 2021-01-07 Apple 1
8 2021-01-08 Apple 2
9 2021-01-09 Apple 3
10 2021-01-10 Apple 4
11 2021-01-11 Orange 0
12 2021-01-12 Orange 1
13 2021-01-13 Orange 2
14 2021-01-14 Orange 3
15 2021-01-15 Orange 4
uj5u.com熱心網友回復:
由于使用tidyverse不是一個要求,這里有一個base R解決方案:
data.frame( df1, Days= as. 向量( sapply( unique(df1$Product)。
function(x) df1$Dates$日期[df1$產品=x][1] ) ) )
日期 產品日
1 2021-01-01 Banana 0
2 2021-01-02 Banana 1
3 2021-01-03 Banana 2
4 2021-01-04 Banana 3
5 2021-01-05 Banana 4
6 2021-01-06 Apple 0
7 2021-01-07 Apple 1
8 2021-01-08 Apple 2
9 2021-01-09 Apple 3
10 2021-01-10 Apple 4
11 2021-01-11 Orange 0
12 2021-01-12 Orange 1
13 2021-01-13 Orange 2
14 2021-01-14 Orange 3
15 2021-01-15 Orange 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310907.html
標籤:
