r - data.table 包(或其 fread() 函数)与汉字的行为不一致
问题描述
与 争吵我的数据时data.table
,我总是收到如下错误:
Error in `[.data.table`(dt1, , sum(持续时间 < as.ITime("04:00:00")), by = 年月) :
object '持续时间' not found
最后,我发现这可能与我使用fread()
. 这是MWE:
方法 1 - 从脚本加载数据
dt1 <- fread("
活动类别,持续时间,开始时间,结束时间,备注,Tags
活动一,00:08:00,2019-11-0719:39:00,2019-11-0719:47:00,故人具鸡黍,
活动二,00:44:00,2019-08-2408:00:00,2019-08-2408:45:00,邀我至田家,
活动三,00:41:00,2019-07-2911:26:00,2019-07-2912:07:00,绿树村边合,
活动四,00:37:00,2019-12-2816:49:00,2019-12-2817:27:00,青山郭外斜,孟浩然
活动三,01:15:00,2019-12-2613:45:00,2019-12-2615:00:00,,
活动五,00:20:00,2019-10-3107:36:00,2019-10-3107:57:00,开轩面场圃,
活动六,00:31:00,2019-07-2018:24:00,2019-07-2018:55:00,把酒话桑麻,李白
活动四,00:31:00,2019-09-0109:09:00,2019-09-0109:41:00,待到重阳日,
活动七,01:23:00,2019-09-2121:06:00,2019-09-2122:30:00,,杜甫
活动三,00:54:00,2019-07-1018:09:00,2019-07-1019:04:00,还来就菊花,
")
dt1[, 持续时间 := as.ITime(持续时间)
][, 开始时间 := as.POSIXct(开始时间, format = "%Y-%m-%d %H:%M")
][, 结束时间 := as.POSIXct(结束时间, format = "%Y-%m-%d %H:%M")
][, 年月 := format(开始时间, "%Y年%m月")]
dt1[, sum(持续时间 < as.ITime("04:00:00")), by = 年月]
一切正常,输出是
## 年月 V1
## 1: 2019年11月 1
## 2: 2019年08月 1
## 3: 2019年07月 3
## 4: 2019年12月 2
## 5: 2019年10月 1
## 6: 2019年09月 2
方法 2 - 从文件中加载数据
foo.csv
只是脚本数据的复制粘贴版本。
dt2 <- fread(file = "foo.csv", encoding = "UTF-8")
dt2[, 持续时间 := as.ITime(持续时间)
][, 开始时间 := as.POSIXct(开始时间, format = "%Y-%m-%d %H:%M")
][, 结束时间 := as.POSIXct(结束时间, format = "%Y-%m-%d %H:%M")
][, 年月 := format(开始时间, "%Y年%m月")]
dt2[, sum(持续时间 < as.ITime("04:00:00")), by = 年月]
但是,这次我收到上面提到的错误
Error in `[.data.table`(dt2, , sum(持续时间 < as.ITime("04:00:00")), by = 年月) :
object '持续时间' not found
更奇怪
> identical(dt1, dt2)
[1] TRUE
顺便说一句,如果数据中没有汉字,这两种方法都有效。随意尝试这个
Type,duration,start,end,comment,Tags
Type1,00:08:00,2019-11-0719:39:00,2019-11-0719:47:00,buljflajfa,
Type2,00:44:00,2019-08-2408:00:00,2019-08-2408:45:00,jljdfajfla,
Type3,00:41:00,2019-07-2911:26:00,2019-07-2912:07:00,kjlfjaljflakjf,
Type4,00:37:00,2019-12-2816:49:00,2019-12-2817:27:00,sgsfgfsgfgs,fgcs
Type3,01:15:00,2019-12-2613:45:00,2019-12-2615:00:00,,
Type5,00:20:00,2019-10-3107:36:00,2019-10-3107:57:00,scgvrsf,
Type6,00:31:00,2019-07-2018:24:00,2019-07-2018:55:00,tbjfcc,
Type4,00:31:00,2019-09-0109:09:00,2019-09-0109:41:00,cgvsdhc,
Type7,01:23:00,2019-09-2121:06:00,2019-09-2122:30:00,,dgd
Type3,00:54:00,2019-07-1018:09:00,2019-07-1019:04:00,fcsdfdgc,
先谢谢了~
> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936 LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.12.8
loaded via a namespace (and not attached):
[1] compiler_3.6.0 rsconnect_0.8.16 htmltools_0.4.0 tools_3.6.0 yaml_2.2.0 Rcpp_1.0.3
[7] rmarkdown_2.1 knitr_1.27 digest_0.6.23 xfun_0.12 packrat_0.5.0 rlang_0.4.3
[13] evaluate_0.14
解决方案
推荐阅读
- google-sheets - 如何将条件格式应用于命名范围?
- amazon-web-services - 无法从 aws 组织中删除用户
- java - ArrayAdapter 无法正常工作,仅显示 1 项
- c# - 静态异步类的模拟单元测试和依赖注入
- android - 如何从浏览器意图中获取 url
- android - 如何对两个模型只使用一次数据快照?
- javascript - 更改页面后附加事件会发生什么?
- c++ - 将多个字符输出到 Windows 命令控制台中的同一位置而不覆盖
- javascript - 我可以根据单选按钮状态设置图像样式吗?
- python - 将用于解压缩 base64 编码位图图像的 Python 2.7 代码转换为 Python 3.7