如何从两个日期之间的数据集中 select 行?
How to select rows from a dataset between two dates?
我有一个相当大的数据集(35 个变量和 65 000 行),我想将它分成三个特定的日期。我有关于动物手术前后的信息。我目前正在使用 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)
无论哪种方式,都不会删除任何行。当我尝试(通过相同的含义)获取手术后的日期时,实际上没有选择任何行。
我检查了我的文件以确保在手术日期之前和之后确实有日期(如果没有,这个结果应该是正常的)并且我可以确认数据集中有两种日期。
我刚刚将手术前日期的示例放在这里,假设它适用于手术后日期的相同模式。
提前感谢那些愿意花时间阅读我的人。如果这个问题与其他问题非常相似,我很抱歉,但我无法自己找到解决方案...
编辑:更具体地说,最终目标是拥有三个独立的数据集。第一个将涵盖手术前采取的所有措施,第二次是手术当天 + 5 天(但我稍后会处理这个),第三次将涵盖 手术后采取的措施。
您所问的解决方案很简单,因为您实际上可以过滤日期并比较多列中的日期。请尝试下面的代码并亲自确认它是否按您预期的那样工作。如果此方法不适用于您自己的数据集,请分享更多有关您的数据和处理的信息,因为您的代码中可能存在错误。 (我已经看到一个错误:你不能使用 select(Date < Surgery_date)
。你需要使用 filter
)。
这就是我处理您的问题的方式。如您所见,代码非常简单。
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)
我有一个相当大的数据集(35 个变量和 65 000 行),我想将它分成三个特定的日期。我有关于动物手术前后的信息。我目前正在使用 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)
无论哪种方式,都不会删除任何行。当我尝试(通过相同的含义)获取手术后的日期时,实际上没有选择任何行。
我检查了我的文件以确保在手术日期之前和之后确实有日期(如果没有,这个结果应该是正常的)并且我可以确认数据集中有两种日期。
我刚刚将手术前日期的示例放在这里,假设它适用于手术后日期的相同模式。
提前感谢那些愿意花时间阅读我的人。如果这个问题与其他问题非常相似,我很抱歉,但我无法自己找到解决方案...
编辑:更具体地说,最终目标是拥有三个独立的数据集。第一个将涵盖手术前采取的所有措施,第二次是手术当天 + 5 天(但我稍后会处理这个),第三次将涵盖 手术后采取的措施。
您所问的解决方案很简单,因为您实际上可以过滤日期并比较多列中的日期。请尝试下面的代码并亲自确认它是否按您预期的那样工作。如果此方法不适用于您自己的数据集,请分享更多有关您的数据和处理的信息,因为您的代码中可能存在错误。 (我已经看到一个错误:你不能使用 select(Date < Surgery_date)
。你需要使用 filter
)。
这就是我处理您的问题的方式。如您所见,代码非常简单。
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)