比较具有不同行数的数据帧的值

时间:2014-03-25 16:08:05

标签: r dataframe row string-comparison

我定义了以下函数,它接受两个DataFrame,DF_TAGS_LIST和DF_epc_list。两个数据框都有一个具有不同行数的列。我想在DF_epc_list中搜索每个值DF_TAGS_LIST,如果找到,则将其存储在另一个数据帧中

DF_TAGS_LIST的一个例子:

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

DF_epc_list的一个例子:

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

编程

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

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