条目包含多个日期的日期之间的天数

时间:2015-03-27 15:51:45

标签: r excel

我有一个数据集,我需要计算不同日期和初始日期之间的天差。更确切地说,这是列表的一个示例:

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天,等等。这里的问题是我有不同的页面不同初始日期。

谢谢!

3 个答案:

答案 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"类,并使用avedate内减去彼此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查找该页面的第一个日期并减去当前日期以给您带来差异 - 对于页面的第一个日期,它将为您提供零