2014-03-25 101 views
1

我定義了以下函數,其中需要兩個DataFrame,DF_TAGS_LIST和DF_epc_list。兩個數據框都有一個行數不同的列。我想搜索在DF_epc_list每個值DF_TAGS_LIST,如果發現,將其存儲在另一個數據幀DF_TAGS_LIST的比較具有不同行數的數據幀的值

一個例子:DF_epc_list的

TAGS_LIST 
3036029B539869100000000B 
3036029B537663000000002A 
3036029B5398694000000009 
3036029B539869400000000C 
3036029B5398690000000006 
3036029B5398692000000007 

其中的一個例子:

EPC 
3036029B539869100000000B 
3036029B537663000000002A 
3036029B5398690000000006 
3036029B5398692000000007 
3036029B5398691000000006 
3036029B5376630000000034 
3036029B53986940000000WF 
3036029B5398694000000454 
3036029B5398690000000234 
3036029B53986920000000FG 

在這情況下,我想要一個數據幀輸出具有以下值:

FOUND_TAGS 
3036029B5398690000000006 
3036029B5398692000000007 
3036029B539869100000000B 
3036029B537663000000002A 

我的功能是:

FOUND_COMPARE_TAGS<-function(DF_TAGS_LIST, DF_epc_list){ 
    DF_epc_list<-toString(DF_epc_list) 
    DF_TAGS_LIST<-toString(DF_TAGS_LIST) 
    DF_found_epc_tags <- data.frame(DF_found_epc_tags=intersect(DF_TAGS_LIST$DF_TAGS_LIST, DF_epc_list$DF_epc_list)); setdiff(union(DF_TAGS_LIST$DF_TAGS_LIST, DF_epc_list$DF_epc_list), DF_found_epc_tags$DF_found_epc_tags) 
    #DF_found_epc_tags <- data.frame(DF_found_epc_tags = DF_TAGS_LIST[unique(na.omit(match(DF_epc_list$DF_epc_list, DF_TAGS_LIST$DF_TAGS_LIST))),]) 
    return(DF_found_epc_tags) 
} 

我現在返回一個有兩列的空數據框。只有R中最近編程

回答

3

可以使用%in%或(正如我在評論中提及)intersect

DF_TAGS_LIST[DF_TAGS_LIST$TAGS_LIST %in% DF_epc_list$EPC, , drop = FALSE] 
#     TAGS_LIST 
# 1 3036029B539869100000000B 
# 2 3036029B537663000000002A 
# 5 3036029B5398690000000006 
# 6 3036029B5398692000000007 
intersect(DF_TAGS_LIST$TAGS_LIST, DF_epc_list$EPC) 
# [1] "3036029B539869100000000B" "3036029B537663000000002A" 
# [3] "3036029B5398690000000006" "3036029B5398692000000007" 
+0

不同之處在於'intersect'是一個集合操作,默認情況下返回相交結果,其中no重複。 – Arun

+0

@阿倫,是的。實際上,我現在只是重新閱讀他們嘗試的解決方案,看看我是否能更好地理解他們實際尋找的結果。我看到'intersect'已經在他們現在的功能中。 – A5C1D2H2I1M1N2O1R2T1

+0

基本上,我想在DF_TAGS_LIST中找到DF_TAGS_LIST的值,並且當我找到匹配項時,我想將該值保存在另一個數據框中。 – Alex

0
FOUND_TAGS <- rbind(TAGS_LIST, EPC) 
FOUND_TAGS <- FOUND_TAGS[duplicated(FOUND_TAGS), , drop = FALSE] 
+0

w當我用這個代碼,我得到這個錯誤:在match.names 錯誤(名稱(xi)): 名稱與以前的名稱不匹配 調用自:match.names(cLabs,names(xi)) – Alex