作者aklim (我搞砸了....)
看板R_Language
标题[问题] 时间处里 (strptime)
时间Thu Mar 14 11:44:15 2019
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
新手(没写过程式,R 是我的第一次
[问题叙述]:
我把以下问题简单化好了。
有一笔资料(txt档,tab分隔)
19 Jan 19 15:40:00
19 Jan 19 15:41:30
(年月日分别各用一个column(纵向)纪录)
我把资料读入到R并将资料转到 "time" object
结果会是:
> time
[1] "19 Jan 19 15:40:00" "19 Jan 19 15:41:30"
strptime转换格式
> time <- strptime(time, format='%d %b %g %H:%M:%S')
> time
[1] NA NA
R就会如此无法处理
但若我先设置Sys.setlocale(LC_time)
就可以得到
> time <- strptime(time, tz="", format='%d %b %g %H:%M:%S')
> time
[1] "2019-01-19 15:40:00 CST" "2019-01-19 15:41:30 CST"
正常处理出需要的结果
现在的问题是,我要使用的package把strptime包在package的一连串程序里面了。
执行指令後会出现error警告,我猜测是时间转换会得到跟前面一样 NA 的结果,
导致後续程序无法进行。
试过在执行package的指令前先设置Sys.setlocale(LC_time),一样是会出现
Error警告。
由於我不会修改程式,所以我应该要如何做才能在不更动windows设定,让
strptime正常运作。
------
目前我在使用R分析从记录设备所获得的纪录资料,资料内容包含日期时间与纪录。
得到的档案为txt档,tab分隔
日期的部分,年月日分别各用一个column(纵向)纪录,时间总共是以一个column纪录。
目前的问题是,当我用 "strptime"要将日期转成 YYYY-MM-DD HH:mm:SS
的时候,R没办法正确处理,所以得到的档案内容会变成 "NA" 。上网查发现有人指出
是时区(时间格式?)的问题,按照指示设定 "Sys.setlocale(LC_time)" 就可以正常
处理了。
现在我要使用另一个package进行分析,卡在一个要把A资料组转成B资料组的步骤。
package的范例只需要下单一步指令就会自己跑,但是我会得到错误讯息,指出
D程式找不到时间资料。我上网查发现GitHub里的D程式码里面包含"strptime"步骤,我
怀疑是一样时间的问题造成。
我试过在执行指令前先照之前设定 "Sys.setlocale(LC_time)" 无效。
请问我可以如何在不动到windows本身设定下,解决时间设定的问题,或是设置参数,
让package能够正常地处理时间资料?
谢谢大大
[程式范例]:
[环境叙述]:
windows7 sp1
R-3.5.2
Rstudio-1.1.463
[关键字]:
strptime
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.76.175.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1552535060.A.110.html
1F:→ andrew43: 请提供明确的资料实例 03/14 12:01
※ 编辑: aklim (211.76.175.171), 03/14/2019 22:08:04
※ 编辑: aklim (211.76.175.171), 03/14/2019 22:12:42
2F:推 locka: 会出现NA是因为本机时间格式月份是中文显示,而你的资料是 03/14 22:40
3F:→ locka: 用Jan,所以才要用Sys.setlocale("LC_TIME","C")把他设成英 03/14 22:40
4F:→ locka: 语系国家的显示方式。这样的处理方法应该没有什麽问题,可 03/14 22:40
5F:→ locka: 以分享你在用哪个package的fucntion吗?搞不好根本不是strp 03/14 22:40
6F:→ locka: time的问题? 03/14 22:40
7F:推 cywhale: 应该可用 lubridate::ymd_hms('19 Jan 19 15:40:00')? 03/14 22:41
8F:推 locka: 请问原po,你说你用到的套件里面有用到strptime(),那有看 03/14 23:05
9F:→ locka: 过里面 format 参数是什麽吗?有没有可能是你的资料("19 Ja 03/14 23:05
10F:→ locka: n 19 15:40:00")不符合他的格式所以喂进去才会没办法转换 03/14 23:05
11F:→ aklim: 谢大大的回应,由於我使用的package,他设计功能就包含分析 03/15 00:52
12F:→ aklim: 我使用的纪录系统的资料。package所提供的范本与我的资料 03/15 00:54
13F:→ aklim: 是一致的,我按说明步骤操作时就卡在资料转换的过程中 03/15 00:56
14F:→ aklim: 我有看到lubridate,但资料不是我一步步处理,是package执 03/15 01:01
15F:→ aklim: 行的,所以我加挂lubridate应该也没用,因为package,并不 03/15 01:03
16F:→ aklim: 是呼叫lubridate处里日期 03/15 01:03
17F:→ celestialgod: 提供资料 跟 相关程式码 不然只能猜而已 03/15 01:19
18F:推 locka: 同意楼上c大~ 03/15 13:15
19F:→ aklim: 其实不用猜,我试过改掉一台电脑的时间日期设定成美国,同 03/15 13:16
20F:→ aklim: 样package的指令是可以正常完成的(同样的档案与指令顺序), 03/15 13:17
21F:→ aklim: 所以我算是可以肯定是strptime无法运算造成的。在这状况下 03/15 13:19
22F:→ aklim: 有办法不改windows设定而达成吗? 03/15 13:20
23F:推 locka: Sys.setlocale()这行指令就是在修改window时间格式设定了 03/15 13:45
24F:→ aklim: 请问这指令是直接改动windows的设定还是改动R环境的设定? 03/15 15:46
25F:推 locka: 应该是 R 环境吧…可是 strptime 也是吃 R 环境设定,所以 03/15 16:08
26F:→ locka: 照理说应该没差 (有错请指正) 如果真的要大家帮助的话,建 03/15 16:08
27F:→ locka: 议还是po可重制错误的程式码 03/15 16:08
28F:→ aklim: 了解了..谢谢大大的帮忙.. 03/17 03:36