Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据日期R计算月数_R_Dataframe_Dplyr_Tidyr_Tidyverse - Fatal编程技术网

如何根据日期R计算月数

如何根据日期R计算月数,r,dataframe,dplyr,tidyr,tidyverse,R,Dataframe,Dplyr,Tidyr,Tidyverse,我在下面提到了dataframr: DF_1 其中,考虑到 DF_2与DF_1的ID相比较 每月创建的行的平均数为Avg(即如果有3行 基于Date2的月份包含90行,比平均值30行多) 每天的平均行数为天(即如果有3个月 包含90行,比天的值1要多 Last5过去5天内创建的行数计数(考虑Date1) 关于Sys.Date() 我在下面提到了相同的代码: library(tidyverse) library(lubridate) DF_2 <- tibble(ID = c(123

我在下面提到了dataframr:

DF_1

  • 其中,考虑到 DF_2与DF_1的
    ID
    相比较
  • 每月创建的行的平均数为
    Avg
    (即如果有3行 基于
    Date2
    的月份包含90行,比平均值30行多)
  • 每天的平均行数为
    (即如果有3个月 包含90行,比
    天的值1要多
  • Last5
    过去5天内创建的行数计数(考虑
    Date1
    ) 关于
    Sys.Date()
我在下面提到了相同的代码:

library(tidyverse)
 library(lubridate)
 DF_2 <- tibble(ID = c(123L, 123L, 123L, 456L, 456L, 456L, 456L), 
                Date1 = c("2018-03-18 06:37:22", "2018-03-18 06:37:21", "2018-03-16 04:03:01", 
                 "2018-03-10 14:46:03", "2018-03-10 14:46:04", "2018-03-10 14:46:03", 
                 "2018-03-10 14:46:15"), 
                Date2 = c(1519109133704, 1520324827462, 1520690354458, 1517319313151, 1515143046429, 1515838021062, 1488092209241)
               )

 DF_2 <- DF_2 %>% mutate(Date1 = ymd_hms(Date1), 
                         Date2 = as.POSIXct(Date2/1000,origin = "1970-01-01")) 

 DF_2_tab <- DF_2 %>% group_by(ID) %>% summarise(date1 = sum(date(Date1)==date(DF_1$Date1[DF_1$ID==ID])),
                            Total = n(), 
                            Month = month(count(Date2)),
                            Avg = mean #Don;t know how to calculate
                            Day = day(Date2),
                            Last5 = sum( (Sys.Date()-date(Date1)) < 5 )
                            )
库(tidyverse)
图书馆(lubridate)
DF_2%总结(date1=总和(date(date1)=date(DF_1$date1[DF_1$ID==ID])),
总计=n(),
月=月(计数(日期2)),
平均值=平均值#不知道如何计算
天=天(日期2),
Last5=总和((Sys.Date()-Date(Date1))<5)
)

您的陈述1不太清楚,DF_1有什么用。无论如何,请参阅下面的代码,以您想要的方式总结DF_2。在这种情况下,我有明确的月数,总记录,第2点和第3点已经完成(假设你只是一个月花30天,正如你上面解释的)。第四点已在守则内完成—

DF_2 = data.table(DF_2)
DF = DF_2[, list(num_mth = uniqueN(format(Date2, "%Y%m")), num_rec=.N, 
          numrec_5d=length(ID[as.numeric(difftime(today(), Date2), units = "days")<=5])), 
          by=ID]
DF_2=数据表(DF_2)
DF=DF_2[,list(num_mth=uniqueN(格式为Date2,%Y%m)),num_rec=.N,

numrec_5d=长度(ID[作为数字(difftime(今日(),日期2),单位=“天”)我很难理解您的条件。例如,您能详细说明第二个条件吗?在第二个条件中,我想计算每月创建的平均行数。您的示例中缺少
DF_1
的定义,当您定义
Avg=mean
并放置一个注释。DF_1的用途是计算DF_1的
Total
行数w.r.t到日期1您的代码工作正常,只需添加
Total
(考虑DF_1的
Date
,计算DF_2中当天的行数(考虑
Date1
),
Avg
(考虑到DF_2的
Date2
,基于月数创建的平均数或行数。您能在这里帮助我添加
Total
Avg
请。@Roy1245在代码中,numrec是Total,recpermonth是AvgWhat
receperday2
,我怎样才能有一列特定ID的全部合计(我正在试着乘以
recpermonth
*
num\u mth
)不知道这是不是正确的方法。
DF_2 = data.table(DF_2)
DF = DF_2[, list(num_mth = uniqueN(format(Date2, "%Y%m")), num_rec=.N, 
          numrec_5d=length(ID[as.numeric(difftime(today(), Date2), units = "days")<=5])), 
          by=ID]
DF_2 <- tibble(ID = c(123L, 123L, 123L, 456L, 456L, 456L, 456L), 
               Date1 = c("2018-03-18 06:37:22", "2018-03-18 06:37:21", "2018-03-16 04:03:01", 
                         "2018-03-10 14:46:03", "2018-03-10 14:46:04", "2018-03-10 14:46:03", 
                         "2018-03-10 14:46:15"), 
               Date2 = c(1519109133704, 1520324827462, 1520690354458, 1517319313151, 1515143046429, 1515838021062, 1488092209241)
)

DF_2 <- DF_2 %>% mutate(Date1 = ymd_hms(Date1), 
                        Date2 = as.POSIXct(Date2/1000,origin = "1970-01-01")) 


DF_1 <- tibble(ID = c(123L, 456L), 
               Date1 = c("18/03/2018 16:45", "10/03/2018 20:15"))

DF_1 <- DF_1 %>% mutate(Date1 = dmy_hm(Date1))


DF_2 = data.table(DF_2)
DF_1 = data.table(DF_1)

DF_2 = DF_2[, Date1:= date(Date1)]
DF_2 = DF_2[, Date2:= date(Date2)]
DF_1 = DF_1[, Date1:= date(Date1)]
DF_1[DF_2, on = c("ID","Date1") , nomatch=0L]


DF = DF_2[, list(num_mth = uniqueN(format(Date2, "%Y%m")), num_rec=.N,
          num_day = uniqueN(format(Date2, "%Y%m%d")),
          numrec_5d=length(ID[as.numeric(difftime(today(), Date2), units = "days")<=5])), 
          by=ID]
DF[, recpermonth := num_rec/num_mth][, recperday := num_rec/num_day][, recperday2 := num_mth/num_day/30]