我有两个数据框: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")))
答案 0 :(得分:1)
我不相信setdiff
直接适用于数据表,因为它需要一个矢量来输入...你必须创建一个函数并应用于所有列。我尝试使用本机数据表函数fsetdiff
。确保两个对象都是可数据对象。
fsetdiff(raw2,raw3)
答案 1 :(得分:0)
有人发布了回复,然后将其删除。但是,它有效,所以我将在这里分享。
如果数据超过多列,我应该使用func getPagesList(completionHandler: @escaping (_ pages: [Page]?, _ error: NSError?) -> Void) {
func displayError(error: String) {
print(error)
completionHandler(nil, self.getErrorFromString(error))
}
pagesRef.observeSingleEvent(of: .value, with: { (pagesSnapshot) in
var pagesList = [Page]()
for pageSnapshot in pagesSnapshot.children {
pagesList.append(Page(snapshot: pageSnapshot as! DataSnapshot))
}
completionHandler(pagesList, nil)
}) { (error) in
// Display error
}
}
函数。
fsetdiff