为什么我过滤数据的R代码会产生不同的结果;fread();及;ffdf();?

为什么我过滤数据的R代码会产生不同的结果;fread();及;ffdf();?,r,dplyr,data.table,ff,R,Dplyr,Data.table,Ff,我有一个巨大的文件,有700万条记录和160个变量。我开始知道fread()和read.csv.ffdf()是处理如此大数据的两种方法。但当我尝试使用dplyr过滤这两个数据集时,我得到了不同的结果。下面是我的数据的一小部分- sample_data AGE AGE_NEONATE AMONTH AWEEKEND 2 18 5 0 3 32 11 0 4 67

我有一个巨大的文件,有700万条记录和160个变量。我开始知道fread()和read.csv.ffdf()是处理如此大数据的两种方法。但当我尝试使用dplyr过滤这两个数据集时,我得到了不同的结果。下面是我的数据的一小部分-

 sample_data
AGE AGE_NEONATE AMONTH AWEEKEND
2   18                  5        0
3   32                 11        0
4   67                  7        0
5   37                  6        1
6   57                  5        0
7   50                  6        0
8   59                 12        0
9   44                  9        0
10  40                  9        0
11  27                  3        0
12  59                  8        0
13  44                  7        0
14  81                 10        0
15  59                  6        1
16  32                 10        0
17  90                 12        1
18  69                  7        0
19  62                 11        1
20  85                  6        1
21  43                 10        0
代码1

代码2-

sample_data <- read.csv.ffdf(file="C:/Users/sample_data.csv", header=F ,fill=T)
header.true <- function(df) {
      names(df) <- as.character(unlist(df[1,]))
      df[-1,]
      }
sample_data<-tbl_ffdf(sample_data)
sample_data<-header.true(sample_data)
age_filter<-sample_data%>%filter(!(is.na(AGE)), between(as.numeric(AGE),65 , 95))

我知道我的第一个代码是正确的,并且给出了正确的结果。第二个代码中我做错了什么

我还没有真正尝试运行您的代码,但从我所看到的情况来看,我怀疑以下几点:

在第二个代码版本中,您正在读取作为数据一部分的标题。这导致将所有列作为
字符导入,而不是
数字导入
此外,您很可能有
default.stringsAsFactors()
返回
TRUE
,这意味着导入的字符列被视为
因子

现在我猜你的
介于
之间是应用于65到95之间的因子水平,而不是实际数字。由于您可能没有每年(年龄)的数据,67和69可能映射到65以下的系数级别(即
as.numeric(年龄)
将返回数字映射到的系数级别,而不是打印时看到的数字)


尝试使用
stringsAsFactors=FALSE
或在阅读后显式转换为字符。

如果使用stringsAsFactors=F运行示例1会发生什么?
AGE AGE_NEONATE AMONTH AWEEKEND
1  67          NA      7        0
2  81          NA     10        0
3  90          NA     12        1
4  69          NA      7        0
5  85          NA      6        1
sample_data <- read.csv.ffdf(file="C:/Users/sample_data.csv", header=F ,fill=T)
header.true <- function(df) {
      names(df) <- as.character(unlist(df[1,]))
      df[-1,]
      }
sample_data<-tbl_ffdf(sample_data)
sample_data<-header.true(sample_data)
age_filter<-sample_data%>%filter(!(is.na(AGE)), between(as.numeric(AGE),65 , 95))
AGE AGE_NEONATE AMONTH AWEEKEND
1  81                 10        0
2  90                 12        1
3  85                  6        1