我有一个数据集,我需要计算不同日期和初始日期之间的天差。更确切地说,这是列表的一个示例:
date page count
23/01/2015 a 1
08/01/2015 b 514
09/01/2015 b 532
10/01/2015 b 175
11/01/2015 b 89
12/01/2015 b 113
13/01/2015 b 97
10/01/2015 c 373
11/01/2015 c 373
12/01/2015 c 315
13/01/2015 c 104
14/01/2015 c 52
15/01/2015 c 21
09/02/2015 d 13
10/02/2015 d 15
11/02/2015 d 6
12/02/2015 d 2
13/02/2015 d 5
14/02/2015 d 6
15/02/2015 d 6
我想要实现的是计算页面中第一个日期与#34; b"之间的天数。剩下的日子。因此,对于页面" b",我现在第二个条目是第一个日期之后的第1天,以下条目是2天,等等。这里的问题是我有不同的页面不同初始日期。
谢谢!
答案 0 :(得分:3)
尝试
library(dplyr)
df2 %>%
mutate(date = as.Date(date, format='%d/%m/%Y')) %>%
group_by(page) %>%
mutate(Diff= abs(as.numeric(date[1L]-date)))
或base R
选项
unsplit(lapply(split(df2, df2$page), function(x) {
Date <- as.Date(x$date, format='%d/%m/%Y')
x$Diff <- as.numeric(Date-Date[1L])
x }), df2$page)
答案 1 :(得分:1)
将date
列转换为"Date"
类,并使用ave
在date
内减去彼此date
的第一个page
。没有包使用。
DF$date <- as.Date(DF$date, "%d/%m/%Y")
transform(DF, offset = ave(as.numeric(date), page, FUN = function(x) x - x[1]))
如果我们知道页面中的日期总是连续的,那么最后一行可以简化为:
transform(DF, offset = ave(count, page, FUN = seq_along) - 1)
在任何一种情况下,我们都会得到:
date page count offset
1 2015-01-23 a 1 0
2 2015-01-08 b 514 0
3 2015-01-09 b 532 1
4 2015-01-10 b 175 2
5 2015-01-11 b 89 3
6 2015-01-12 b 113 4
7 2015-01-13 b 97 5
8 2015-01-10 c 373 0
9 2015-01-11 c 373 1
10 2015-01-12 c 315 2
11 2015-01-13 c 104 3
12 2015-01-14 c 52 4
13 2015-01-15 c 21 5
14 2015-02-09 d 13 0
15 2015-02-10 d 15 1
16 2015-02-11 d 6 2
17 2015-02-12 d 2 3
18 2015-02-13 d 5 4
19 2015-02-14 d 6 5
20 2015-02-15 d 6 6
注意:强>
我们将其用作DF
:
Lines <- "date page count
23/01/2015 a 1
08/01/2015 b 514
09/01/2015 b 532
10/01/2015 b 175
11/01/2015 b 89
12/01/2015 b 113
13/01/2015 b 97
10/01/2015 c 373
11/01/2015 c 373
12/01/2015 c 315
13/01/2015 c 104
14/01/2015 c 52
15/01/2015 c 21
09/02/2015 d 13
10/02/2015 d 15
11/02/2015 d 6
12/02/2015 d 2
13/02/2015 d 5
14/02/2015 d 6
15/02/2015 d 6"
DF <- read.table(text = Lines, header = TRUE)
答案 2 :(得分:1)
在 Excel 中,如果日期从A2开始,而页面从B2开始,则在D2中尝试将此公式复制下来
=A2-INDEX(A$2:A2,MATCH(B2,B$2:B2,0))
使用INDEX/MATCH
查找该页面的第一个日期并减去当前日期以给您带来差异 - 对于页面的第一个日期,它将为您提供零