Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并两个长度不同的数据集会在R中引发错误_R_Data.table - Fatal编程技术网

合并两个长度不同的数据集会在R中引发错误

合并两个长度不同的数据集会在R中引发错误,r,data.table,R,Data.table,我试图合并两个长度不同的数据集/datatable,但我经常会遇到以下错误 Error in `[.data.table`(y, xkey, nomatch = ifelse(all.x, NA, 0), allow.cartesian = allow.cartesian) : retFirst must be integer vector the same length as nrow(i) 我无法理解错误消息的含义。有人能帮忙吗? 我正在使用以下代码进行合并: merge(x=R

我试图合并两个长度不同的
数据集/datatable
,但我经常会遇到以下错误

Error in `[.data.table`(y, xkey, nomatch = ifelse(all.x, NA, 0), allow.cartesian = allow.cartesian) 

: 
  retFirst must be integer vector the same length as nrow(i)
我无法理解错误消息的含义。有人能帮忙吗? 我正在使用以下代码进行合并:

merge(x=Red,y=Error,by=c("loopN","TYPE"),all.x=TRUE)

datatable data:
数据表红色
时间型环差
11/26/2014 0:45	28808	141126	0
11/26/2014 1:00	28808	141126	0
11/26/2014 1:15	28808	141126	0
11/26/2014 1:30	28808	141126	0
11/26/2014 1:15	189379	141126	0
11/26/2014 1:30	189379	141126	0
11/26/2014 2:15	189379	141126	0
11/26/2014 1:00	239188	141126	0
11/26/2014 1:15	239188	141126	0
11/26/2014 1:30	239188	141126	0
11/26/2014 13:30 239188	141126	0
数据表错误
loopN类型V1
141126	28808	-2.932
141126	28808	-2.932
141126	28808	-2.932
141126	28808	-2.932
141126	189379	1.061
141126	189379	-1.182
141126	189379	4.771
141126	239188	-0.163
141126	239188	-1.573
141126	239188	-1.981

141126 239188-1.981
你打算做的事情似乎很奇怪。您的data.table
RED
有4条记录,分别为
TYPE=28808
loopN=141126
。类似地,data.table
ERROR
也有4条记录,它们是
TYPE
loopN
的组合。因此,合并(join)将生成16个记录。如果你的整个1MM记录数据表是这样的,那么结果将是巨大的。如果这真的是你想要的,这个就可以了

RED   <- structure(list(TIME = c("11/26/2014 0:45", "11/26/2014 1:00", "11/26/2014 1:15", "11/26/2014 1:30", "11/26/2014 1:15", "11/26/2014 1:30", "11/26/2014 2:15", "11/26/2014 1:00", "11/26/2014 1:15", "11/26/2014 1:30", "11/26/2014 13:30"), TYPE = c(28808L, 28808L, 28808L, 28808L, 189379L, 189379L, 189379L, 239188L, 239188L, 239188L, 239188L), loopN = c(141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L), diff = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("TIME", "TYPE", "loopN", "diff"), class = "data.frame", row.names = c(NA, -11L))
ERROR <- structure(list(loopN = c(141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L, 141126L), TYPE = c(28808L, 28808L, 28808L, 28808L, 189379L, 189379L, 189379L, 239188L, 239188L, 239188L, 239188L), V1 = c(-2.932, -2.932, -2.932, -2.932, 1.061, -1.182, 4.771, -0.163, -1.573, -1.981, -1.981)), .Names = c("loopN", "TYPE", "V1"), class = "data.frame", row.names = c(NA, 11L))

# you start here...
library(data.table)
setkey(setDT(ERROR),loopN,TYPE)
setkey(setDT(RED),loopN,TYPE)
result <- ERROR[RED, allow.cartesian=TRUE]

RED请提供一个可复制的示例。Avinash的意思是:如果您能给我们一些示例数据,这将非常有用。为您的应用程序添加了数据表示例数据reference@Leo这是一个错误。更正了错误。@Kaushal,您介意使用dput(您的数据表)提供您的数据样本吗?这是(我所知道的)使你的例子可复制的最好方法。我没有让你对“结果”有什么看法……而且我不需要16条记录。它应该是4条记录,其中RED和ERROR datatable中的LoopN和TYPE应该匹配。它更像是sql的左外连接,带有红色和错误。假设
RED
只有前4条记录,与
ERROR
相同。那么这两个表的所有记录都将具有完全相同的
类型
loopN
。您会将<代码>红色
中的哪个记录与<代码>错误中的哪个记录相匹配?任何联接(左、右、笛卡尔)都会将
红色
中的每条记录与
错误
中的每条记录相匹配,因此结果中有16个匹配项和16行。