【问题标题】:Extracting rows from start date and end dates that contain specific value in R从开始日期和结束日期中提取包含 R 中特定值的行
【发布时间】:2020-10-16 04:28:59
【问题描述】:

我有一个数据框,其中有一列 ID 号和每次 ID 登录网站时的日期。我需要计算“ID”在指定时间间隔内登录网站的总次数。

我想创建一个函数来输入login_check(startdate, enddate, ID) 在参数中创建一个 ID 号的新数据框列,每一行反映她在时间间隔内的每次登录尝试

然后我可以使用length()函数来计算时间范围内的登录总数

有人可以帮我在时间范围内为特定 ID 创建数据框吗?

数据:

structure(list(Order_ID = c(69L, 3025L, 3549L, 27L, 4561L, 2429L ), Date = structure(c(17899, 17921, 17925, 17923, 17917, 17919 ), class = "Date")), row.names = c(NA, 6L), class = "data.frame")

【问题讨论】:

  • 你能分享使用 dput() 的重现示例吗?
  • 结构(列表(Order_ID = c(69L, 3025L, 3549L, 27L, 4561L, 2429L), 日期 = 结构(c(17899, 17921, 17925, 17923, 17917, 17919), class= "日期")), row.names = c(NA, 6L), class= "data.frame")
  • 数据集中有多个相同的订单ID

标签: r time


【解决方案1】:

dplyr::filter 可用于根据您的条件过滤数据集。

logins <- structure(list(Order_ID = c(69L, 3025L, 3549L, 27L, 4561L, 2429L ), Date = structure(c(17899, 17921, 17925, 17923, 17917, 17919 ), class = "Date")), row.names = c(NA, 6L), class = "data.frame") 

login_check <- function(startdate, enddate, ID) {
  dplyr::filter(logins, Order_ID == ID, Date >= startdate, Date <= enddate)
}

login_check('2019-01-01', '2020-01-01', 3025)
#> Order_ID       Date
#> 1     3025 2019-01-25

或者,如果您更喜欢基本 R

login_check <- function(startdate, enddate, ID) {
  logins[logins$Order_ID == ID & logins$Date >= startdate & logins$Date <= enddate,]
}

或者使用subset

login_check <- function(startdate, enddate, ID) {
  subset(logins, Order_ID == ID & Date >= startdate & Date <= enddate)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2021-05-12
    • 2012-08-19
    相关资源
    最近更新 更多