R:在子集设置过程中丢失数据(data.table)

R:在子集设置过程中丢失数据(data.table),r,data.table,R,Data.table,尝试将data.table子集时,我丢失了数据 这是写入文件的.csv文件 Timestamp,Date,Time,SN,A.Ms.Amp,A.Ms.Vol,A.Ms.Watt,Pac 2013-10-01 12:00:00,2013-10-01,12:00:00,2110000001,23.04,465.43,10723,13544.5 2013-10-01 12:00:00,2013-10-01,12:00:00,2110000002,7.81,474.16,3704,6860 2013-1

尝试将data.table子集时,我丢失了数据

这是写入文件的.csv文件

Timestamp,Date,Time,SN,A.Ms.Amp,A.Ms.Vol,A.Ms.Watt,Pac
2013-10-01 12:00:00,2013-10-01,12:00:00,2110000001,23.04,465.43,10723,13544.5
2013-10-01 12:00:00,2013-10-01,12:00:00,2110000002,7.81,474.16,3704,6860
2013-10-01 12:00:00,2013-10-01,12:00:00,2110000003,6.97,484.19,3374,6661
2013-10-01 12:05:00,2013-10-01,12:05:00,2110000001,23.19,467.05,10830,13576
2013-10-01 12:05:00,2013-10-01,12:05:00,2110000002,8.4,462.52,3883.5,7366.5
2013-10-01 12:05:00,2013-10-01,12:05:00,2110000003,7.72,470.6,3631,7169
2013-10-01 12:10:00,2013-10-01,12:10:00,2110000001,23.98,470.29,11278.5,14127.5
2013-10-01 12:10:00,2013-10-01,12:10:00,2110000002,8.62,458.47,3952,7475.5
2013-10-01 12:10:00,2013-10-01,12:10:00,2110000003,7.9,462.62,3654,7182.33
2013-10-01 12:15:00,2013-10-01,12:15:00,2110000001,24.27,467.37,11342,14193
2013-10-01 12:15:00,2013-10-01,12:15:00,2110000002,8.61,458.96,3949,7502
2013-10-01 12:15:00,2013-10-01,12:15:00,2110000003,8.13,458.31,3725,7338
2013-10-01 12:20:00,2013-10-01,12:20:00,2110000001,22.3,461.71,10279.5,12735.5
2013-10-01 12:20:00,2013-10-01,12:20:00,2110000002,8.51,461.87,3929,7553.5
2013-10-01 12:20:00,2013-10-01,12:20:00,2110000003,7.83,462.19,3618.5,7331.5
以下是我运行的代码:

library(data.table)
a<-fread("complete1.csv")
a[,`:=`(Timestamp=ymd_hms(Timestamp),
Date=ymd(Date),
SN=as.factor(SN))]
a[SN==c("2110000001","2110000002"),c("Timestamp","Date","Time","SN","A.Ms.Watt","Pac"),with=FALSE]

不幸的是,我不太理解这些警告。但每隔12:xx:x5次(例如12:00:05)我就会丢失数据。我可能做错了什么?

这不是一个
数据表问题,而是一个不正确的运算符问题。操作符
==
是矢量化的。查看以下内容时会发生什么:

a[,list(Timestamp,SN, SN == c("2110000001","2110000002"))]

              Timestamp         SN    V3
 1: 2013-10-01 12:00:00 2110000001  TRUE
 2: 2013-10-01 12:00:00 2110000002  TRUE
 3: 2013-10-01 12:00:00 2110000003 FALSE
 4: 2013-10-01 12:05:00 2110000001 FALSE
 5: 2013-10-01 12:05:00 2110000002 FALSE
 6: 2013-10-01 12:05:00 2110000003 FALSE
 7: 2013-10-01 12:10:00 2110000001  TRUE
 8: 2013-10-01 12:10:00 2110000002  TRUE
 9: 2013-10-01 12:10:00 2110000003 FALSE
10: 2013-10-01 12:15:00 2110000001 FALSE
11: 2013-10-01 12:15:00 2110000002 FALSE
12: 2013-10-01 12:15:00 2110000003 FALSE
13: 2013-10-01 12:20:00 2110000001  TRUE
14: 2013-10-01 12:20:00 2110000002  TRUE
15: 2013-10-01 12:20:00 2110000003 FALSE
Warning message:
In SN == c("2110000001", "2110000002") :
  longer object length is not a multiple of shorter object length
这在R语言手册中有记录,在:

R一次处理整个数据向量,大多数基本运算符和基本数学函数(如
log
)都是向量化的(如上表所示)。这意味着,例如,添加两个相同长度的向量将创建一个包含元素和的向量,隐式循环向量索引。这也适用于其他操作符,如
-
*
/
,以及更高维的结构

SN
c(“2110000001”、“2110000002”)
中的一个值时,如果希望
TRUE
,请在%
中使用
%,如

SN %in% c("2110000001","2110000002")

这不是一个
数据表问题,而是一个不正确的操作员问题。操作符
==
是矢量化的。查看以下内容时会发生什么:

a[,list(Timestamp,SN, SN == c("2110000001","2110000002"))]

              Timestamp         SN    V3
 1: 2013-10-01 12:00:00 2110000001  TRUE
 2: 2013-10-01 12:00:00 2110000002  TRUE
 3: 2013-10-01 12:00:00 2110000003 FALSE
 4: 2013-10-01 12:05:00 2110000001 FALSE
 5: 2013-10-01 12:05:00 2110000002 FALSE
 6: 2013-10-01 12:05:00 2110000003 FALSE
 7: 2013-10-01 12:10:00 2110000001  TRUE
 8: 2013-10-01 12:10:00 2110000002  TRUE
 9: 2013-10-01 12:10:00 2110000003 FALSE
10: 2013-10-01 12:15:00 2110000001 FALSE
11: 2013-10-01 12:15:00 2110000002 FALSE
12: 2013-10-01 12:15:00 2110000003 FALSE
13: 2013-10-01 12:20:00 2110000001  TRUE
14: 2013-10-01 12:20:00 2110000002  TRUE
15: 2013-10-01 12:20:00 2110000003 FALSE
Warning message:
In SN == c("2110000001", "2110000002") :
  longer object length is not a multiple of shorter object length
这在R语言手册中有记录,在:

R一次处理整个数据向量,大多数基本运算符和基本数学函数(如
log
)都是向量化的(如上表所示)。这意味着,例如,添加两个相同长度的向量将创建一个包含元素和的向量,隐式循环向量索引。这也适用于其他操作符,如
-
*
/
,以及更高维的结构

SN
c(“2110000001”、“2110000002”)
中的一个值时,如果希望
TRUE
,请在%
中使用
%,如

SN %in% c("2110000001","2110000002")