r 中的 setdiff 不提取数据子集
setdiff in r is not pulling subset of data
我有两个数据框:raw2
有 28,406 条记录和 raw3
26,421 条记录。
raw3
中的记录是 raw2
中记录的子集。事实上 raw3
是使用以下方法派生的:
raw3<-setDT(raw2)[order(O_ID, Program_forsorting), head(.SD, 1), .(O_ID)]
我现在有一个 setdiff
函数,我正在尝试将未从 raw2
转移到 raw3
的记录使用:
settdiff(raw2,raw3)
结果应该有 1,985 条记录。但是,结果有 28,406,代表 raw2
。如果我将公式切换为 settdiff(raw3,raw2)
,结果将包含 26,421 条记录。
我做错了什么?
这是示例数据
raw2<-as.data.frame(cbind("col1"=c("a","h","b","f","g"),"O_ID"=c(1,1,1,4,5), "Program_forsorting"=c("p1","p2","p2","p3","p1")))
我不相信 setdiff
直接在数据表上工作,因为它需要一个向量作为输入...您必须创建一个函数并应用于所有列。我会尝试使用本机数据表函数 fsetdiff
。确保两个对象都是数据表对象。
fsetdiff(raw2,raw3)
有人发布了回复,然后将其删除。但是,它有效,所以我会在这里分享。
如果数据跨越多个列,我应该使用 fsetdiff
函数。
fsettdiff(raw2,raw3)
我有两个数据框:raw2
有 28,406 条记录和 raw3
26,421 条记录。
raw3
中的记录是 raw2
中记录的子集。事实上 raw3
是使用以下方法派生的:
raw3<-setDT(raw2)[order(O_ID, Program_forsorting), head(.SD, 1), .(O_ID)]
我现在有一个 setdiff
函数,我正在尝试将未从 raw2
转移到 raw3
的记录使用:
settdiff(raw2,raw3)
结果应该有 1,985 条记录。但是,结果有 28,406,代表 raw2
。如果我将公式切换为 settdiff(raw3,raw2)
,结果将包含 26,421 条记录。
我做错了什么?
这是示例数据
raw2<-as.data.frame(cbind("col1"=c("a","h","b","f","g"),"O_ID"=c(1,1,1,4,5), "Program_forsorting"=c("p1","p2","p2","p3","p1")))
我不相信 setdiff
直接在数据表上工作,因为它需要一个向量作为输入...您必须创建一个函数并应用于所有列。我会尝试使用本机数据表函数 fsetdiff
。确保两个对象都是数据表对象。
fsetdiff(raw2,raw3)
有人发布了回复,然后将其删除。但是,它有效,所以我会在这里分享。
如果数据跨越多个列,我应该使用 fsetdiff
函数。
fsettdiff(raw2,raw3)