Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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_Dplyr_Lubridate - Fatal编程技术网

R 如何在两个日期之间从数据集中选择行?

R 如何在两个日期之间从数据集中选择行?,r,dplyr,lubridate,R,Dplyr,Lubridate,我有一个相当大的数据集(35个变量和65000行),我想把它分成三个特定的日期。我在手术前后都有关于动物的信息。我目前正在使用dplyr软件包。下面我介绍一下我的数据集是什么样子的,我只是举一个例子,因为在我的数据集dput上使用时,我得到了一些非常大且不可读的东西。在这个例子中,我有几个为个人测量的日期。有关个人的信息在手术日期前完成,手术日期对每个人都是唯一的。例如,在过去几年中进行的测量 Name Date Measurement Surgery_date

我有一个相当大的数据集(35个变量和65000行),我想把它分成三个特定的日期。我在手术前后都有关于动物的信息。我目前正在使用
dplyr
软件包。下面我介绍一下我的数据集是什么样子的,我只是举一个例子,因为在我的数据集
dput
上使用时,我得到了一些非常大且不可读的东西。在这个例子中,我有几个为个人测量的日期。有关个人的信息在手术日期前完成,手术日期对每个人都是唯一的。例如,在过去几年中进行的测量

Name           Date    Measurement    Surgery_date
Pierre     2016-03-15     5.12         2017-03-21
Pierre     2017-03-16     4.16         2017-03-21
Pierre     2017-08-09     5.08         2017-03-21
Paul       2016-07-03     5.47         2017-03-25
Paul       2016-09-30     4.98         2017-03-25
Paul       2017-04-12     4.51         2017-03-25
目前,我一直在使用
lubridate
软件包为测量日期和手术日期设置日期格式。然后我尝试使用
dplyr
包对数据进行排序。我尝试了
filter
select
,但都没有得到预期的结果

data1$Date <- parse_date_time(data1$Date, "d/m/y")
data1$Date <- ymd(data1$Date)
data1$Surgery_date <- parse_date_time(data1$Surgery_date, "d/m/y")
data1$Surgery_date <- ymd(data1$Surgery_date)

before_surgery <- data1
before_surgery <- dplyr::as_tibble(before_surgery)
before_surgery <- before_surgery %>%
    filter(Date > Surgery_date)

before_surgery <- before_surgery %>%
    select(Date < Surgery_date)

data1$Date解决问题的方法很简单,因为实际上您可以过滤日期并在多个列中比较日期。请尝试下面的代码,并确认自己,这是你所期望的工作。如果这种方法在您自己的数据集上不起作用,请分享有关您的数据和处理的更多信息,因为您的代码中可能有错误。(我已经看到一个错误:您不能使用
选择(日期
。您需要使用
过滤器

这就是我解决你问题的方法。正如您所看到的,代码非常简单

df <- data.frame(
  Name = c(rep('Pierre', 3), rep('Paul', 3)),
  Date = c('2016-03-15', '2017-03-26', '2017-08-09', '2016-07-03', '2016-09-30', '2017-04-12'),
  Measurement = c(5.12, 4.16, 5.08, 5.47, 4.98, 4.51),
  Surgery_date = c(rep('2017-03-21', 3), rep('2017-03-25', 3))
) %>%
  mutate(Surgery_date = ymd(Surgery_date),
         Date = ymd(Date))

df %>%
  filter(Date < Surgery_date)

df %>%
  filter(Date > Surgery_date & Date < (Surgery_date + days(5)))

df %>%
  filter(Date > Surgery_date)
df%
突变(手术日期=ymd(手术日期),
日期=ymd(日期))
df%>%
过滤器(日期<手术日期)
df%>%
过滤器(日期>手术日期和日期<(手术日期+天数(5)))
df%>%
过滤器(日期>手术日期)

您仍然可以共享
dput
输出吗?你的问题包含了太多的信息,你的最终目标是什么?您的问题可以加粗。@A.Stam:dput
dput
太大,无法共享,即使我试图通过删除一些列来减小它的大小@尼尔森:我很抱歉这么不严谨。我想,分为三个不同时期的独立数据集。第一个将涵盖手术前采取的所有措施,第二个是手术本身+5天(但我会在以后处理这一天),第三个将涵盖手术后采取的措施。这基本上是我之前所做的,我不知道为什么之前没有结果。然而,我一定是做错了什么,因为现在它正在工作!非常感谢您的时间和帮助(: