过滤时间戳R中的最后n个观察值

过滤时间戳R中的最后n个观察值,r,datetime,dplyr,R,Datetime,Dplyr,我是R方面的新手,我有一个简单的问题 我有一个数据帧,其中有一列关于时间戳和各种其他特性。时间戳列是31天,我必须得到时间戳的最后n天(比如16天) 假设31天,它会给我过去16天(10月16日至10月31日)的观察结果。我知道如何在Python中做到这一点,但我不知道如何在R中做到这一点 样本df: f1 f2 f3 timestamp 1 2 3 2020-10-02 14:36:03 2 3 5 2020-10-03 14:26:03 1 2 3 2020-10-05 1

我是R方面的新手,我有一个简单的问题

我有一个数据帧,其中有一列关于时间戳和各种其他特性。时间戳列是31天,我必须得到时间戳的最后n天(比如16天)

假设31天,它会给我过去16天(10月16日至10月31日)的观察结果。我知道如何在Python中做到这一点,但我不知道如何在R中做到这一点

样本df:

f1 f2 f3 timestamp
1  2  3  2020-10-02 14:36:03
2  3  5  2020-10-03 14:26:03
1  2  3  2020-10-05 14:36:03
2  3  5  2020-10-05 14:26:03
1  2  3  2020-10-07 14:36:03
2  3  5  2020-10-10 14:26:03
1  2  3  2020-10-12 14:36:03
2  3  5  2020-10-13 14:26:03
1  2  3  2020-10-15 14:36:03
2  3  5  2020-10-16 14:26:03
1  2  3  2020-10-22 14:36:03
2  3  5  2020-10-25 14:26:03
1  2  3  2020-10-26 14:36:03
2  3  5  2020-10-31 14:26:03

结果应该是什么样的:

f1 f2 f3 timestamp
2  3  5  2020-10-16 14:26:03
1  2  3  2020-10-22 14:36:03
2  3  5  2020-10-25 14:26:03
1  2  3  2020-10-26 14:36:03
2  3  5  2020-10-31 14:26:03
时间戳中的时间对于每次观察都是不同的,上面的框架仅用于说明目的。 任何帮助都将不胜感激

更新以消除混淆:


我不能像在原始数据帧中那样使用tail()函数,每天有多个值。抱歉没有说清楚。

如果您需要先订购数据帧,然后使用order,那么您可以简单地使用
unique
tail
来获取日期,然后简单地过滤数据帧。我假设timestamp是指R中的
POSIXct
类,然后再试一次


数据可能您需要
子集中的
润滑

library(lubridate)
subset(
  df,
  day(timestamp) >= days_in_month(timestamp) - 15
)
或者以
dplyr
的方式

df %>%
  filter(between(day(timestamp), days_in_month(timestamp) - 15, days_in_month(timestamp)))

   f1 f2 f3           timestamp
10  2  3  5 2020-10-16 14:26:03
11  1  2  3 2020-10-22 14:36:03
12  2  3  5 2020-10-25 14:26:03
13  1  2  3 2020-10-26 14:36:03
14  2  3  5 2020-10-31 14:26:03
数据

> dput(df)
structure(list(f1 = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 2L), f2 = c(2L, 3L, 2L, 3L, 2L, 3L, 2L, 3L, 2L, 3L,
2L, 3L, 2L, 3L), f3 = c(3L, 5L, 3L, 5L, 3L, 5L, 3L, 5L, 3L, 5L,
3L, 5L, 3L, 5L), timestamp = structure(c(1601642163, 1601727963,
1601901363, 1601900763, 1602074163, 1602332763, 1602506163, 1602591963,
1602765363, 1602851163, 1603370163, 1603632363, 1603719363, 1604150763
), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA,
-14L), class = "data.frame")

尝试对data.frame使用dput()并发布结果。然后您可以直接使用示例数据进行尝试。
tail
函数
tail(df,n)
将返回数据帧的最后一行。例如,
last8@SteveM我不能使用tail函数,因为每天有多个值。有没有其他选择。嗨@Thomas,我不能使用tail函数,因为每天有多个值。有其他选择吗?很好用。我不知道这种方法。我会读更多的。@Syedahed我简化了我的答案,这样你就可以查出来了