我有一个数据集.我可以选择从Stata文件或SPSS文件加载到R上.
在这两种情况下,都可以使用避风港包正确装入.日期得到正确认可.
但是当我用data.table的fwrite函数将它保存到磁盘时.
fwrite(ppp, "ppp.csv", sep=",", col.names = TRUE)
我有一个问题,日期消失,并转换为无意义的数字.
例如,1967-08-06的日期现在是-879
我也试过玩fwrite选项,比如quote = FALSE,没有成功.
我上传了一小部分文件样本,spss,stata和保存的csv.
这是代码,为了让您更轻松.
library(haven)
library(data.table)
ppp <- read_sav("pspss.sav") # choose one of these two.
ppp <- read_dta("pstata.dta") # choose one of these two.
fwrite(ppp, "ppp.csv", sep=",", col.names = TRUE)
真正的整个表有一千多个变量和一百万个人.这就是为什么我想用快速的方式做事.
http://www73.zippyshare.com/v/OwzwbyQq/file.html
这是@ArtificialBreeze:
> head(my)
# A tibble: 6 x 9
ID_2006_2011 TIS FECHA_NAC_2006 año2006 Edad_31_12_2006 SEXO_2006
<dbl> <chr> <date> <date> <dbl> <chr>
1 1.60701e+11 BBNR670806504015 1967-08-06 2006-12-31 39 M
2 1.60701e+11 BCBD580954916014 1958-09-14 2006-12-31 48 F
3 1.60701e+11 BCBL451245916015 1945-12-05 2006-12-31 61 F
4 1.60701e+11 BCGR610904916012 1961-09-04 2006-12-31 45 M
5 1.60701e+11 BCMR580148916015 1958-01-08 2006-12-31 48 F
6 1.60701e+11 BCMX530356917018 1953-03-16 2006-12-31 53 F
# ... with 3 more variables: PAIS_NAC_2006 <dbl>, FECHA_ALTA_TIS_2006 <date>,
# FECHA_ALTA_TIS_2006n <date>
Run Code Online (Sandbox Code Playgroud)
自6个月前提出此问题以来,fwrite已经改进并已发布给CRAN.我相信它应该按照你现在想要的方式工作; 即快速,直接和方便的日期格式.它现在有dateTimeAs如下参数,现在从CRAN fwrite的手册页复制到CRAN.随着时间的推移,请查看手册页的最新版本.
====
dateTimeAs :如何编写Date/IDate,ITime和POSIXct项目.
"ISO"(默认) - 2016-09-12,18:12:16和2016-09-12T18:12:16.999999Z.为了方便起见,无论是否有任何R选项(如digits.secs),都会打印0,3或6位小数秒.我们的想法是,如果存在毫秒和微秒,那么您很可能希望保留它们.R的内部UTC表示忠实地编写,以鼓励ISO标准,阻碍时区模糊和速度.要考虑的一个选项是在UTC时区中启动R,只需在shell中使用"$ TZ ='UTC'R"(注意:它必须是TZ ='UTC'和R之间的一个或多个空格,其他任何东西都将是静默的忽略;此TZ设置仅适用于R进程)或Sys.setenv(TZ ='UTC')在R提示符处,然后继续,就像UTC是本地时间一样.
"南瓜" - 20160912,181216和20160912181216999.此选项允许使用整数div和mod操作快速简单地提取yyyy,mm,dd和(最常见的是分组)yyyymm部分.例如,在R中,一个行辅助函数可以分别使用%/%10000,%/%100 %% 100,%% 100和%/%100.POSIXct UTC被压缩到17位(包括3位数毫秒总是,即使是000),它可以作为integer64舒适地读取(由fread()自动读取).
"划时代" - 17056,65536和1473703936.999999.自相关时期(分别为1970-01-01,00:00和1970-01-01T00:00:00Z)以来的基础天数或秒数,在此之前为负(见?日期).如果存在,则打印0,3或6位小数秒.
"write.csv" - 目前仅影响POSIXct.它写为write.csv,使用as.character方法,该方法需要数字.secs并从R的内部UTC表示转换回该历史日期的本地时间(或"tzone"属性).因此,这可能很慢.所有其他列类型(包括独立于时区的Date,IDate和ITime)都使用快速C代码写为"ISO"选项,该代码已与write.csv一致.
由于新的专用C代码,前三个选项很快.从3月1日开始的一年中,使用Howard Hinnant(参见参考资料)的快速方法进行了日期 - 部分转换.您不应该注意到这三个选项之间的写入速度有任何差异.Date和IDate支持的日期范围是[0000-03-01,9999-12-31].这些3,652,365个日期中的每一个都经过测试并与基准R进行比较,包括该范围内的所有2,790个闰日.此选项也适用于列表列单元格中的日期/时间向量.不支持完全灵活的格式字符串(例如"%m /%d /%Y").这是为了鼓励使用ISO标准,因为不知道如何在C级快速制作.如果需要,我们可能能够支持一个或两个更具体的选项.
====