我正在使用data.table :: fread导入具有750万行和56列的大型数据集。我为某些变量指定变量类,这些变量将使用colClasses参数作为字符读取。导入后数据看起来很好,并且列类正确创建。
但是,当我过滤数据时,开始出现问题。不幸的是,我无法在此处构建示例,因为我不知道到底是什么问题。
但是当我使用二进制逻辑过滤一些行时,基本上会发生错误。
首先,'id'列被读取为字符,并且str / glimpse / class / mode均对其进行确认。那为什么会这样呢:
mydata[mydata$id == 01005845, year]
[1] 2015 2014 2013 2012
mydata[mydata$id == "01005845", year]
[1] 2011 2010 2009 2008 2007 2006 2005
为了进一步测试,我针对这些特定观察重新检查了数据类,这些数据仍显示为字符:
typeof(mydata[mydata$id == 01005845, id])
[1] "character"
glimpse(mydata[mydata$id == 01005845, id])
chr [1:4] "01005845" "01005845" "01005845" "01005845"
mydata[mydata$id == 01005845, id] == 01005845
TRUE TRUE TRUE TRUE
这对我来说没有任何意义,因为对于其他一些id来说,所有类型都是字符,我不会得到这个奇怪的结果。
全部是这个字符-整数比较不一致使我所有的分析混乱。我的过滤无法正常工作,并且输出受到严重影响。
感谢您的帮助。保重:)
01005845
,则会得到>01005845
#[1] 1005845
由于id
列为字符,因此应使用
mydata[id == "01005845", year]
这个小例子演示了问题library(data.table) df <- data.table(a = c('2011', '02011', '2011', '2012', '02011'), b = letters[1:5]) df[a == 02011, ] # a b #1: 2011 a #2: 2011 c df[a == "02011", ] # a b #1: 02011 b #2: 02011 e