n <- 30date <- as.Date("2019-04-01") + 0:(n-1)dd <- data.table(date = date, v1 = 1:n, v2 = rnorm(n))
设置date为索引:
dd <- setkey(dd, date)
用通常的方法来索引一行:
dd[date == "2019-04-07"]
由于date本身就是索引,所以更为简洁的方式应该是:
dd["2019-04-07"]
但却报错:
Error in bmerge(i, x, leftcols, rightcols, xo, roll, rollends, nomatch, :
typeof x.date (double) != typeof i.V1 (character)
看起来是因为在用dd["2019-04-07"]形式时,没能将时间字符转换为Date的底层实际类型double。而dd[date == "2019-04-07"]时,应该是自动转换了。
虽然后者的索引方式能够解决问题,但还是感到不够简洁。当然了,如果时将Date类型转为character类型,是可以用dd["2019-04-07"]的方式来索引的,但是这样以character来存储时间,在一些数据变换的操作中又没法用好时间的特性。
不知有没有什么更为优雅的办法来解决问题?