我正在尝试确定两个日期之间的差,但是要从R中的单独数据帧中确定。这是一个数据帧,可以说d1
id date value
2222 11/1/12 22.65
2222 11/2/12 23.11
20100 10/30/12 35.21
20100 11/2/12 38.97
20103 10/30/12 57.98
20103 10/31/12 60.83
这是另一个可以说的d2
id date value
2222 10/30/12 21.01
2222 10/31/12 22.04
20100 10/31/12 37.07
20100 11/1/12 38.17
20103 10/29/12 57.98
20103 10/16/12 60.83
我的预期输出是
Datediff
2 day
2 day
-1 day
1 day
1 day
15 day
我尝试在mutate参数中的d1
上使用,然后直接从date
调用d2
的列
data_RN<-d1 %>% group_by(id) %>% mutate(datediff= d1$date-d2$date)
我也收到错误消息:
错误:列
datediff
的长度必须为201(组大小)或一个,而不是1000 另外:警告消息: 在Ops.factor(Call_date,df2 $ date)中: ‘-’对因素没有意义
我还想知道如何找到以分钟为单位的日期时间差异
答案 0 :(得分:1)
我认为问题出在group_by(id)
。删除此元素,您将获得所需的内容:
library(tidyverse)
df1<-tribble(~id ,~ date ,~ value ,
2222 , "11/1/12" , 22.65 ,
2222 , "11/2/12" , 23.11 ,
20100 , "10/30/12" , 35.21 ,
20100 , "11/2/12" , 38.97 ,
20103 , "10/30/12" , 57.98 ,
20103 , "10/31/12" , 60.83 )
df2<-tribble(~id ,~ date ,~ value,
2222 , "10/30/12" , 21.01 ,
2222 , "10/31/12" , 22.04 ,
20100 , "10/31/12" , 37.07 ,
20100, "11/1/12" , 38.17 ,
20103 , "10/29/12" , 57.98 ,
20103 , "10/16/12" , 60.83 )
df1<-df1%>%mutate(date= as.Date(df1$date,format= "%m/%d/%y"))
df2<-df2%>%mutate(date= as.Date(df2$date,format= "%m/%d/%y"))
data_RN<-df1 %>%mutate(datediff= df1$date-df2$date)
Output:
# A tibble: 6 x 4
id date value datediff
<dbl> <date> <date> <drtn>
1 2222 2012-11-01 2012-11-01 2 days
2 2222 2012-11-02 2012-11-02 2 days
3 20100 2012-10-30 2012-10-30 -1 days
4 20100 2012-11-02 2012-11-02 1 days
5 20103 2012-10-30 2012-10-30 1 days
6 20103 2012-10-31 2012-10-31 15 days
答案 1 :(得分:0)
如果您有日期时间值,则可能需要根据您拥有的date
(读为POSIXct
)将format
更改为?strptime
类,{{1} 1}} {} order
},以便我们正确整理所有数据,然后将id
与difftime
指定为units
使用几分钟。
"mins"