r中的setdiff没有拉动数据子集

时间:2018-04-06 19:14:21

标签: r subset set-difference

我有两个数据框: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")))

2 个答案:

答案 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