作者joson4921 (特务)
看板R_Language
标题[问题] 时间栏位有小数点,strptime取值显示NA
时间Mon Jan 30 04:05:54 2017
- 问题: 当你想要问问题时,请使用这个类别。
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
*[m
[问题叙述]:
如题,解压缩出来之後时间栏位竟然有小数点...
快被搞死了,试过用记事本把".000"删掉,但是行不通所以只能上来求救了
资料大概长得像以下那副鬼德性:
( Time, Leave, UniqueBusID 为原始资料栏位) (rid与qid为新增栏位)
Time Leave UniqueBusID rid qid
2015-01-01 13:36:50.000 False 屯区艺文中心->莒光新城163 1 2
2015-01-01 13:36:56.000 True 屯区艺文中心->莒光新城163 2 2
2015-01-01 13:37:28.000 False 屯区艺文中心->莒光新城163 3 2
2015-01-01 13:37:38.000 False 屯区艺文中心->莒光新城163 4 2
2015-01-01 13:38:43.000 False 屯区艺文中心->莒光新城163 5 2
2015-01-01 13:37:53.000 True 莒光新城->屯区艺文中心164 1 1
2015-01-01 13:38:19.000 False 莒光新城->屯区艺文中心164 2 1
2015-01-01 13:38:38.000 False 莒光新城->屯区艺文中心164 3 1
2015-01-01 13:38:58.000 False 莒光新城->屯区艺文中心164 4 1
2015-01-01 13:39:10.000 False 莒光新城->屯区艺文中心164 5 1
我要做的事情是跟之前一样,依据UniqueBusID分类
并选取同样UniqueBusID的第一笔Leave==True资料,新增rid和qid进行编码
rid为同样UniqueBusID的资料(照时间排序)
qid为同样UniqueBusID的第一笔Leave==True资料
之前问过类似的问题,附上程式码如下
UniqueBusID_Select <- BusData %>% # 输入并锁定路线往返程起点
.[grep("莒光新城->\\d*|屯区艺文中心->\\d*", .$UniqueBusID)] %>%
.[,c("rid","qid"):=list(.I, .I[which(Leave==TRUE)][1L]), by=.(UniqueBusID)]
到这边都没问题,时间有正确读入UniqueBusID_Select(包括小数点)
新增的栏位rid和qid亦遵循我定下的规则完成编码的动作
接着就是鬼开始鬼打墙了:
UniqueBusID_Select[,Time:= as.POSIXct(strptime(Time,
"%Y/%m/%d %H:%M:%S.000")) )]
如上式,我要把年月日时分秒读入,透过strptime和as.POSIXct处理之後
存成新的栏位Time,但这个步骤不管怎麽试都行不通
跑出来的UniqueBusID_Select通通显示NA
换了好几个方法通通都不管用,请求各位大大协助突破..感谢!
[程式范例]:
[环境叙述]:
[关键字]:
as.POSIXct
strptime
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.138.62.223
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1485720358.A.71B.html
※ 编辑: joson4921 (223.138.62.223), 01/30/2017 04:08:13
※ 编辑: joson4921 (223.138.62.223), 01/30/2017 04:18:31
1F:→ joson4921: 补充,资料量为150万笔左右,我自己有测试同样都是时 01/30 08:47
2F:→ joson4921: 间栏位删除小数点的资料,<104857笔的可以,超过就不 01/30 08:47
3F:→ joson4921: 行,不知道跟这个有没有关系 01/30 08:47
4F:→ clansoda: gsub? 01/30 09:13
5F:→ cywhale: gsub can work,and as.POSIXct("2015-01-01 13:36:50.000 01/30 10:14
6F:→ cywhale: should also work in data.table.. or also try Dirk's 01/30 10:15
8F:→ clansoda: That's cool. I do not consider anytime even though 01/30 12:17
9F:→ clansoda: I know this package already. 01/30 12:17
10F:→ celestialgod: strptime(DT$Time, "%Y-%m-%d %H:%M:%OS") 01/30 14:10
11F:→ celestialgod: concern速度就用 lubridate::fast_strptime 01/30 14:11
13F:→ celestialgod: fast_strptime不加lt=FALSE,data.table会无法正确 01/30 14:14
14F:→ celestialgod: 储存 01/30 14:14
15F:→ joson4921: 谢谢c大还有楼上几位大大提供建议,fast_strptime真的快 01/31 01:50
16F:→ joson4921: 非常多,c大最先窝的%OS的用法之前有查到但一样解不了, 01/31 01:51
17F:→ joson4921: 最後改用fast_strptime终於解决了,大感谢!!!! 01/31 01:52
18F:→ joson4921: 最先说的%OS 01/31 01:52