我正在尝试找到一种方法,将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年只有二月的数据;但是,正如我上面所说,我希望能够以这种方式多年提取数据。如果有人以前遇到过这个问题或有建议我会很感激帮助。
答案 0 :(得分:0)
你最好使用像format
这样的东西:
format(Tdf$date, '%m') == '02'
您的方法存在的问题是==
的{{1}}超载,内部R尝试将Date
转换为-02-
,然后才与{{1}进行比较}}。当然Date
本身并不对应任何日期。在比较之前,格式方法首先将Tdf$date
转换为-02-
。
一些包(例如Date
,character
)具有辅助函数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