按部分日期r

时间:2018-01-15 20:57:47

标签: r date subset

我正在尝试找到一种方法,将data.frame分组为仅一个月的记录,但是多年(即仅来自四月但是1900年,1901年,1902年等的数据)。我使用as.Date函数将日期信息放入日期类。这是一个例子:

require("adehabitatHR")
data(teal)
Tdf <- teal
Tdf$date <- as.Date(Tdf$date, "%Y%m%d")

现在要对它进行子集化,我尝试使用和不使用通配符将日期设置为月份值:

TdfFeb <- Tdf[Tdf$date == "*-02-*"]
TdfFeb <- Tdf[Tdf$date == "-02-"]

但是,在这两种情况下,我收到一个错误:charToDate(x)中的错误:字符串不是标准的明确格式;这表明R没有认识到我输入的是合法的日期格式(我也用“/”和“。”而不是“ - ”进行了尝试;所有这些都有相同的结果。

我也尝试将其设置为模式

TdfFeb <- Tdf[Tdf$date == pattern = "-02-"]

当然这也不起作用,因为模式之后出现意外的“=”错误。

我意识到,对于这个特定的数据集,简单地做一个日期范围就可以了,因为1901年只有二月的数据;但是,正如我上面所说,我希望能够以这种方式多年提取数据。如果有人以前遇到过这个问题或有建议我会很感激帮助。

3 个答案:

答案 0 :(得分:0)

你最好使用像format这样的东西:

format(Tdf$date, '%m') == '02'

您的方法存在的问题是==的{​​{1}}超载,内部R尝试将Date转换为-02-,然后才与{{1}进行比较}}。当然Date本身并不对应任何日期。在比较之前,格式方法首先将Tdf$date转换为-02-

一些包(例如Datecharacter)具有辅助函数lubridate,它将返回一个数字(具体来说,在data.table的情况下,{{ 1}})month允许类似但可能更具可读性的方法:

data.table

答案 1 :(得分:0)

执行此操作的最佳方法是合并usb0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 ether ba:b9:a5:2a:b2:04 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 worker_processes auto; events { use epoll; worker_connections 4096; } http { sendfile on; keepalive_timeout 10; } / gunicorn --bind 0.0.0.0:80 --workers 16 --max-requests 1000 ****.wsgi:application

lubridate::month

答案 2 :(得分:0)

由于您拥有有效日期,因此可以使用library("adehabitatHR") data(teal) library(dplyr) library(lubridate) # Change column to date and create month column teal <- mutate(teal, date = ymd_hms(date), month = month(date)) # Filter for month teal %>% filter(month == 2) x y date month 1 5.915332 45.44334 1901-02-01 00:29:11 2 2 3.394462 42.64384 1901-02-01 05:51:41 2 3 9.994273 43.42349 1901-02-01 07:06:29 2 4 0.704653 39.45739 1901-02-01 10:03:25 2 5 3.215867 41.60035 1901-02-01 12:54:33 2 6 3.275865 43.58711 1901-02-02 00:07:21 2 7 4.723084 43.49749 1901-02-02 06:53:26 2 8 1.760862 41.37676 1901-02-02 07:01:53 2 9 5.814787 41.64366 1901-02-02 13:59:14 2 10 2.435756 48.94306 1901-02-02 16:04:14 2 ... 提取月份。

If M6 = erro Then